Как импортировать сторонний модуль в файл декларации (*. 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';
Другие вопросы по тегам