Как импортировать сторонний модуль в файл декларации (*. D.ts)?
Я создал файл объявления типа (index.d.ts
), и мне нужно использовать объект стороннего пакета ('moment.js' в node_modules
) как тип.
// index.d.ts
import * as Moment from 'moment';
declare var $: any;
declare var google: any;
interface foo {
a: Moment;
b: string;
...
}
Я сделал код, как указано выше, но он не работает. Как импортировать сторонний модуль в *.d.ts
файл?
1 ответ
Файл.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;
}
Лично я использую первый стиль для моих файлов, которые используют много экспортируемых членов из пространства имен, но если мне нужно только несколько, я использую второй стиль.
редактировать...
Если ваш tsconfig имеет esModuleInterop
включен (что является новым предпочтительным параметром), импорт из первого примера может / должен удалить * as
немного.
import moment from 'moment';