typescript - 如何在声明文件(*.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
文件中导入第三方模块?
解决方案
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';
推荐阅读
- arrays - 查找数组子集的最大值和最小值
- postgresql - Redshift - 基于嵌套公用表表达式创建表
- css - Overriding CSS media queries
- airflow - Airflow: Subdag Fails Without Scheduling Tasks or Generating Log
- sql - 如何仅引入自上次 ssis 运行以来已更改的行
- neo4j - Cypher 可变长度模式
- php - 位置:在导致代码中断的文本字段中
- sesam - Sesam DTL - 查找具有重复属性的实体
- php - 如何查看在某个文件之前执行的php文件的层次结构
- php - php,遍历每个子页面