Как импортировать сторонний модуль в файл декларации (*. D.ts)? - PullRequest
0 голосов
/ 21 февраля 2019

Я создал файл объявления типа (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 Ответ

0 голосов
/ 21 февраля 2019

Файл .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';
...