为内置节点外部声明猴子补丁 类

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 提取模块的声明,一切正常。

有趣的是,这提出了一种无需声明即可加载模块的方法。