为内置节点外部声明猴子补丁 类
Externally declaring monkey patches for built-in Node classes
我写了一个名为 cached-date
的 NPM 包,猴子修补了 Date
class。它缓存日期的标准字符串表示形式。
一切都很好,除了我无法让我的 Typescript 项目识别包中包含的类型定义:
// index.d.ts
declare interface Date {
toCachedString(): string;
toCachedDateString(): string;
toCachedISOString(): string;
toCachedJSON(): string;
toCachedTimeString(): string;
toCachedUTCString(): string;
}
以下代码产生编译器错误 Property 'toCachedISOString' does not exist on type 'Date'
:
// Typescript application
require('cached-date');
const date = new Date();
const isoStr = date.toCachedISOString();
package.json
的相关部分如下:
// package.json
"main": "index.js",
"types": "index.d.ts",
奇怪的是,当我将 index.d.ts
移动到我的项目的本地声明文件夹(tsconfig.json
中的 "paths"
)时,一切都很好,保持不变,并将其命名为 Date.d.ts
。
同样,当我在应用程序中放入以下声明时一切正常:
// application
export interface Date {
toCachedString(): string;
toCachedDateString(): string;
toCachedISOString(): string;
toCachedJSON(): string;
toCachedTimeString(): string;
toCachedUTCString(): string;
}
有没有一种特殊的方法可以让我在外部合并内置类型的声明?谢谢!
我明白了。实际上,这有点尴尬。只需替换此:
require("cached-date");
有了这个:
import "cached-date";
现在 Typescript 提取模块的声明,一切正常。
有趣的是,这提出了一种无需声明即可加载模块的方法。
我写了一个名为 cached-date
的 NPM 包,猴子修补了 Date
class。它缓存日期的标准字符串表示形式。
一切都很好,除了我无法让我的 Typescript 项目识别包中包含的类型定义:
// index.d.ts
declare interface Date {
toCachedString(): string;
toCachedDateString(): string;
toCachedISOString(): string;
toCachedJSON(): string;
toCachedTimeString(): string;
toCachedUTCString(): string;
}
以下代码产生编译器错误 Property 'toCachedISOString' does not exist on type 'Date'
:
// Typescript application
require('cached-date');
const date = new Date();
const isoStr = date.toCachedISOString();
package.json
的相关部分如下:
// package.json
"main": "index.js",
"types": "index.d.ts",
奇怪的是,当我将 index.d.ts
移动到我的项目的本地声明文件夹(tsconfig.json
中的 "paths"
)时,一切都很好,保持不变,并将其命名为 Date.d.ts
。
同样,当我在应用程序中放入以下声明时一切正常:
// application
export interface Date {
toCachedString(): string;
toCachedDateString(): string;
toCachedISOString(): string;
toCachedJSON(): string;
toCachedTimeString(): string;
toCachedUTCString(): string;
}
有没有一种特殊的方法可以让我在外部合并内置类型的声明?谢谢!
我明白了。实际上,这有点尴尬。只需替换此:
require("cached-date");
有了这个:
import "cached-date";
现在 Typescript 提取模块的声明,一切正常。
有趣的是,这提出了一种无需声明即可加载模块的方法。