【发布时间】:2017-12-23 14:03:13
【问题描述】:
我目前正在将我的项目从 ES5 转换为 ES6,但我遇到了 MomentJS (version 2.18.1) 的问题。问题是我有一些变量是 Moment 对象,但我不能对它们调用 moment() 。
一个例子:
import * as moment from "moment";
export class DateThingy {
constructor(private moment) { //What type does this have??
}
public getDate(): moment.Moment {
return this.moment();
}
}
1) 如果我将private moment 的类型设置为private moment: moment,WebStorm 会报错:“找不到名称'moment'。”
2) 如果我将类型设置为private moment: moment.Moment,则对象已更改,我不能再调用this.moment()(它现在是一个对象并且没有函数调用)。 Webstorm 告诉我:“无法调用类型缺少呼号的表达式。类型 'Moment' 没有可兼容的呼号。”
3) 我不能再使用 MomentStatic,因为它没有被导出。如果我输入 private moment: moment.MomentStaticWebStorm 会给我:“命名空间 'moment' 没有导出的成员 'MomentStatic'”
那么在这个例子中我应该使用什么类型呢?
【问题讨论】:
-
您在标题中说“ES6”,但看起来您实际上是在使用 TypeScript(来自代码和标签)。你应该使用#2,会有一个全局的
moment你可以使用,比如getDate(): moment.Moment { return moment(); } -
检查
moment.d.ts。顺便说一句,moment是命名空间,而不是类型。 -
@MikeMcCaughan,你是对的。改了标题。但我不明白你的回答。如果我添加 moment.Moment als 打字,我会得到“无法调用类型缺少呼号的表达式”。那么全局是什么意思?
-
@torazaburo,没错。
moment也是一个函数 (declare function moment(): moment.Moment)。但是我想知道如何键入变量以便可以在其上调用该函数? (moment在它的接口上有一个函数(),但我似乎不能给变量类型moment) -
您正在寻找
moment.Moment。
标签: typescript momentjs