我目前正在将我的项目从ES5转换为ES6,但我遇到了MomentJS(version 2.18.1)的问题.问题是我有几个变量是矩对象,但我不能对它们调用矩().

举个例子:

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 momentprivate moment: moment,WebStorm会抱怨:"cannot find name 'moment'."

2) 如果我将类型设置为private moment: moment.Moment,那么对象已经更改,我无法再调用this.moment()(它现在是一个对象,没有函数调用).cannot invoke an expression whose type lacks a call signiture. Type 'Moment' has no campatible call signatures.告诉我:"网络风暴"

3) 我不能再使用MomentStatic了,因为它没有导出.如果我输入private moment: moment.MomentStatic,WebStorm会给我:"namespace 'moment' does not have an exported member 'MomentStatic'"

那么在这个例子中,我应该使用什么类型呢?

推荐答案

正如Mike McCaughan所说,矩对象不能被注入构造函数中.在MomentJS的旧版本中,这是可能的.这可以通过移除构造函数属性并访问通过import * as moment from "moment"包含的全局矩对象来解决.

函数moment()返回Moment对象.这可以通过moment.Moment输入.

因此,代码可以重写如下:

import * as moment from "moment";

export class DateThingy{

     constructor() {
     }

     public getDate(): moment.Moment { 
        return moment();
     }
}

Typescript相关问答推荐

"@ clerker/nextjs/server没有名为clerkMiddleware的导入成员'

如何使用另一个类型的属性中的类型

泛型函数类型验证

在TypeScript中使用泛型的灵活返回值类型

我用相同的Redux—Toolkit查询同时呈现两个不同的组件,但使用不同的参数

接口的额外属性作为同一接口的方法的参数类型'

Express Yup显示所有字段的所有错误

如何使用WebStorm调试NextJS的TypeScrip服务器端代码?

角效用函数的类型推断

已解决:如何使用值类型限制泛型键?

MatTool提示在角垫工作台中不起作用

如何将父属性类型判断传播到子属性

vue-tsc失败,错误引用项目可能无法禁用vue项目上的emit

专用路由组件不能从挂钩推断类型

将布尔值附加到每个对象特性

抽象类对派生类强制不同的构造函数签名

可赋值给类型的类型,从不赋值

递归类型别名的Typescript 使用

在tabel管理区域react js上设置特定顺序

剧作家测试未加载本地网址