我没有让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
我在“依赖项”中添加“时刻”:
在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] 删除。
我来说两句