используя 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,
}
}