Promise的扩充打破了新Promise的类型推断(...)

时间:2017-02-23 21:02:16

标签: typescript typescript2.0

我正在尝试通过添加额外的方法来增强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开发人员报告。

0 个答案:

没有答案