typescript - 如何在扩展 JavaScript 原型的 TypeScript 文件中导入库
问题描述
使用这个问题中描述的技术,我正在尝试使用 Moment.js 来扩展Date
TypeScript 项目中的原型。
扩展Date
原型作品,如下所述:
interface Date {
myExtension: () => string;
}
if (!Date.prototype.myExtension) {
Date.prototype.myExtension = function(): string {
return 'some value derived from a date';
};
}
但是,只要我导入 Moment.js,通过将以下行添加到我的文件中,TypeScript 就会使我的代码无效,并告诉我Property 'myExtension' does not exist on type 'Date'
.
import * as moment from 'moment';
我应该以另一种方式声明 Moment.js 导入吗?
解决方案
不确定,这moment
与您的问题有什么关系-我在这里假设您想将全局类型添加到Date.prototype
,这将由moment
.
您可以通过在自己的文件中定义类型 1.) 或在现有文件模块之一中定义类型 2.)来扩充内置类型的全局类型定义。Date
.d.ts
1.全局声明文件
创建global.d.ts
(命名无关紧要)。将Date
接口放入其中,该接口将与来自lib.d.ts
. 确保您没有任何顶级export
或import
声明来将类型附加到全局命名空间/范围。global.d.ts
将自动包含在带有tsconfig.json
.
// global.d.ts:
interface Date {
myExtension: () => string;
}
2.文件模块
使用以下命令将定义包装在全局上下文中declare global
:
// inside some file module with export/import
...
declare global {
interface Date {
myExtension: () => string;
}
}
在 App.ts 中测试
// use moment for implementation
import * as moment from "moment";
if (!Date.prototype.myExtension) {
Date.prototype.myExtension = function(): string {
return "some value derived from a date";
};
}
const d = new Date();
console.log(d.myExtension()); // some value derived from a date
推荐阅读
- sql - 在 SSIS 中拆分具有多种记录类型的文本文件
- html - TS2322:类型“自动”不能分配给类型“方向”
- facebook-graph-api - 什么是页面的图形 API 以获取关注者、喜欢和信使交互的用户列表?
- javascript - console.log 在异步序列中表现异常
- android - 即使应用程序被杀死,如何获取 USER_PRESENT 事件?
- angular - 使用 [class] 时不渲染材质图标
- flutter - 如何在颤动中创建带有文本行的颜色条
- reactjs - 用反应钩子操纵状态,
- node.js - 我如何使用nodejs在猫鼬的类型字段中获取名称的值
- javascript - 关于 ParseInt 的 JavaScript 查询