如何在声明文件(* .d.ts)中导入第三方模块?

时间:2019-02-21 09:32:19

标签: typescript declaration-files

我创建了类型声明文件(index.d.ts),并且需要使用第三方包的对象(node_modules中的'moment.js')作为类型。


  // 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 :(得分:0)

.d.ts file that ships with 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';