繁体   English   中英

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

[英]How do I import third-party module in declaration file(*.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文件中导入第三方模块?

Moment包装随附.d.ts文件将其导出的所有内容包装到命名空间中。 因此,对于这个库, import * as Moment from 'moment';import * as Moment from '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';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM