我正在尝试通过添加额外的方法来增强Promise,如TypeScript文档中所述 - Global augmentation。
它在测试中运行良好1.但由于某种原因,它打破了在测试2中使用构造函数创建的Promise的类型推断.TypeScript停止推断类型为Promise<boolean>
并将其推断为Promise<{}>
代替。如果我删除了我的扩充,则使用构造函数创建的Promise
的泛型类型是正确推断的。
任何想法为什么会发生以及如何解决?
以下是我正在尝试做的简化示例:
// src/test.ts
// augmentation
interface Promise<T> {
myCustomMethod(): T;
}
// test 1
let data: number = Promise.resolve(42)
.then((value) => value + 4)
.myCustomMethod();
// test 2
let p2: Promise<boolean> = new Promise((resolve) => {
resolve(true);
})
我的配置:
// tsconfig.json
{
"compilerOptions": {
"module": "es6",
"target": "es6",
"baseUrl": "./src"
}
}
我得到的错误是:
src/test.ts(9,5): error TS2322: Type 'Promise<{}>' is not assignable to type 'Promise<boolean>'.
Type '{}' is not assignable to type 'boolean'.
UPD
我看到该类型总是被推断为Promise<{}>
用于测试2.但是现在我无法理解,为什么没有我的扩充就不报告这个错误。自Type '{}' is not assignable to type 'boolean'.
起,即使没有扩充,也不应出现此错误吗?
只是想了解它是否有意或者我应该向TypeScript开发人员报告。