Typescript-这是扩展@Types模块中定义的类型定义的最安全,最正确的方法



问题是通用的,但是要清楚我将使用一个例子。

我正在使用 nodejs tyepscript 构建一个应用程序。我需要从 nodejs 中使用readlinereadlines使用接口ReadLineOptions

我已经通过命令npm install @types/node --save-dev安装了类型。这是安装ReadLineOptions的类型定义(在当前版本的DEF的当前版本中)

export interface ReadLineOptions {
    input: NodeJS.ReadableStream;
    output?: NodeJS.WritableStream;
    completer?: Completer | AsyncCompleter;
    terminal?: boolean;
    historySize?: number;
}

当我开始使用ReadLineOptions时,我发现类型定义缺少我需要的一个属性,即crlfDelay

为了克服问题,我将crlfDelay属性添加到ReadLineOptions的类型定义中,更改文件@types/node/index.d.ts

我强烈怀疑这不是做这种事情的最正确的方法。我希望有一种方法可以将类型DEF扩展到我的应用程序代码中的某个地方,但找不到方法。

您只需创建一个新的文件,该文件重新限制模块和接口,只添加丢失的属性。Typescript将自动合并接口定义,并创建一个包含所有属性

的单个接口
// readline-augmentation.d.ts
declare module "readline" {
    export interface ReadLineOptions {
        crlfDelay?: number;
    }
}
// test.ts 
import * as rd from 'readline'
var d : rd.ReadLineOptions = {
    crlfDelay : 10,
    ....
}