Aurelia CLI,TypeScript和MomentJS

米卡尔·科斯基宁(Mikael Koskinen)

我没有让Aurelia(CLI),TypeScript和MomentJS一起工作。我已经看到了Aurelia&Moment问题的解决方案,但是他们没有使用Aurelia CLI。

这是我目前正在做的事情:

使用Aurelia CLI的新Aurelia项目:

au new 

我选择TypeScript而不是Babel。

安装时刻

npm install moment --save

这将安装Moment 2.4.1。我可以从node_modules中找到它(包括moment.d.ts)。

编辑aurelia.json

我在“依赖项”中添加“时刻”:

时刻aurelia.json

在app.ts中使用Moment

现在,当我尝试在app.ts中导入Moment时,问题就开始了。

import { moment } from 'moment';

这给出了错误:“模块“ o:/ dev / spikes / amoment / node_modules / moment / moment”没有导出的成员'moment'

更换外壳可解决此错误:

import { Moment } from 'moment';

但是在这一点上,我完全陷入困境。尝试使用动量(或动量)时,总是出现错误“无法找到名称'moment'。这是当前的app.ts,给出的是“无法找到名称'moment'”-错误:

import { Moment } from 'moment';

export class App {
  message = 'Hello World!';

  hello() : string {
    return moment.format();
  }
}

导入似乎是问题所在。任何想法如何解决这个问题?

更新资料

将app.ts修复如下所示后,现在可以编译该东西。但是在运行时会给出“ TypeError:无法读取未定义的属性'format'”。

import { Moment } from 'moment';
import { autoinject } from "aurelia-framework";

export class App {
  message: string;
  moment: Moment;

  constructor(moment: Moment) {
    this.moment = moment;
    this.message = this.moment.format('MMMM Do YYYY, h:mm:ss a')
  }
}

更新资料

根据上一个错误,似乎没有@autoinject的情况下autoinject无法正常工作。因此添加了错误,错误发生了变化:“ TypeError:moment.format不是函数”。

import { Moment } from 'moment';
import { autoinject } from "aurelia-framework";

@autoinject
export class App {
  message: string;
  moment: Moment;

  constructor(moment: Moment) {
    this.message = moment.format();
  }
}
马顿·萨吉

MomentJS是一个全局模块,仅导出moment变量。d.ts文件中的其他接口定义(例如interface Moment)不会被导出为真实的。这些用于TypeScript编译器和intellisense。

这就是为什么您遇到上述TS编译器和TypeError问题的原因。您可能使用autoinject欺骗了编译器,但没有使用浏览器。

瞬间的定义文件

declare module 'moment' {
    var moment: moment.MomentStatic;
    export = moment;
}

为了使其正常工作,请使用如下所示的import语句:[moment docs]

import * as moment from 'moment';

之后,该moment变量将变为可用,您可以照常使用它。

在课堂上的用法:

import * as moment from 'moment';

export class App {
    message = 'Hello World!';

    constructor(){
    }

    hello() : string {
        return moment().format();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章