如何在声明文件(*.d.ts)中导入第三方模块?
How do I import third-party module in declaration file(*.d.ts)?
我创建了类型声明文件(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
文件中导入第三方模块?
.d.ts file that ships with Moment wraps 将其导出到名称空间中的所有内容都包装起来。因此,对于这个库,像 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
(这是新的首选设置),则从第一个示例 can/should 中导入会删除 * as
位。
import moment from 'moment';
我创建了类型声明文件(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
文件中导入第三方模块?
.d.ts file that ships with Moment wraps 将其导出到名称空间中的所有内容都包装起来。因此,对于这个库,像 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
(这是新的首选设置),则从第一个示例 can/should 中导入会删除 * as
位。
import moment from 'moment';