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.json
的lib
-部分中有"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)