将静态属性添加到内置类型声明中



TypeScript的内置打字机当前缺少AbortSignal.timeout。如何编写.d.ts文件来添加它?

这不起作用:

declare namespace AbortSignal {
function timeout(milliseconds: number): AbortSignal;
}
Duplicate identifier 'AbortSignal'.(2300)
lib.dom.d.ts(1984, 11): 'AbortSignal' was also declared here.
lib.dom.d.ts(1996, 13): and here.

如果您使用TypeScript 4.5+,您可以通过安装@types/web作为lib替换来解决此问题:

pnpm add @typescript/lib-dom@npm:@types/web --save-dev
npm install @typescript/lib-dom@npm:@types/web --save-dev
yarn add @typescript/lib-dom@npm:@types/web --dev

这要求您在tsconfig.jsonlib-部分中有"dom"

绕过这一问题的一种方法是简单地重新声明var并包含timeout属性:

declare var AbortSignal: {
prototype: AbortSignal
new(): AbortSignal
abort(reason?: any): AbortSignal
timeout(milliseconds: number): AbortSignal
}

只有当您还包括Typescript已经知道的所有属性时,这才会起作用。另一种变通方法是扩展类型:

type AbortSignalWithTimeout = AbortSignal & { timeout(milliseconds: number): AbortSignal }
const timeoutSignal = (AbortSignal as unknown as AbortSignalWithTimeout).timeout(5000)

最新更新