Файл .d.ts, который поставляется с Moment , оборачивает все, что он экспортирует, в пространство имен.Таким образом, для этой библиотеки импорт как import * as Moment from 'moment';
означает, что переменная Moment
является пространством имен, а не интерфейсом для самого экземпляра Moment.Вам нужен интерфейс, который находится внутри пространства имен.
У вас есть два варианта:
import * as moment from 'moment';
interface foo {
a: moment.Moment;
b: string;
}
Или деконструкция интерфейса во время импорта:
import { Moment } from 'moment';
interface foo {
a: Moment;
b: string;
}
Лично я использую первый стиль для моих файлов, в которых используется множество экспортируемых элементов из пространства имен, но если мне нужно только несколько, я использую второй стиль.
edit ...
Если в вашем tsconfig включена esModuleInterop
(что является новым предпочтительным параметром), импорт из первого примера может / должен удалить бит * as
.
import moment from 'moment';