используя MomentJS с TypeScript - Какой тип имеет момент()?

В настоящее время я конвертирую свой проект из 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 жалуется: "не могу найти имя" момент "."

2) Если я установил тип на private moment: moment.Moment, объект изменился, и я больше не могу вызывать this.moment() (теперь это объект, и у него нет вызова функции). Webstorm говорит мне: "не может вызвать выражение, тип которого не имеет сигнатуры вызова. Тип" Момент "не имеет пригодных для подписи вызовов".

3) Я больше не могу использовать MomentStatic, так как он не экспортируется. Если я наберу private moment: moment.MomentStatic, WebStorm выдаст мне: "Пространство имён" момент "не имеет экспортированного члена MomentStatic" "

Итак, какую печатать я должен использовать для этого примера?

Ответ 1

Как сказал Майк МакКоган, объект объекта не может быть введен в конструктор. Как-то это было возможно со старой версией MomentJS. это можно решить, удалив свойство конструктора и получив доступ к объекту глобального момента, включенному через import * as moment from "moment".

Функция moment() возвращает объект Moment. Это можно ввести через moment.Moment. moment.Moment.

Поэтому код можно переписать следующим образом:

import * as moment from "moment";

export class DateThingy{

     constructor() {
     }

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

Ответ 2

Вы пробовали импортировать момент без псевдонима?

import moment from 'moment';

Это сработало для меня. И компилятор машинописного текста не будет жаловаться на это.

const date = moment().format('YYYYMMDD');

Обратите внимание, что для этого требуется обновление tsconfig!

В TSConfig вам нужно добавить параметр allowSyntheticDefaultImports, чтобы разрешить импорт библиотек по умолчанию, которые не имеют экспорта по умолчанию.

Пример (tsconfig.json):

{
  "compileOnSave": false,
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
  }
}