首页 > 解决方案 > 如何在声明文件(*.d.ts)中导入第三方模块?

问题描述

我创建了类型声明文件(index.d.ts),我需要使用第三方包('moment.js' in 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文件中导入第三方模块?

标签: typescriptdeclaration-files

解决方案


Moment包装附带的.d.ts 文件将它导出的所有内容包装到命名空间中。所以对于这个库,导入 likeimport * 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';

推荐阅读