为什么当我尝试将foo
作为Promise<string>
处理时,以下示例不会生成TypeScript编译器警告(而是在运行时失败)?
let foo: Promise<string> = Promise.resolve(10); // should not compile
foo.then(v => v.toUpperCase());
// -> TypeError: v.toUpperCase is not a function
只有当我放Promise.resolve<string>(10)
时才会收到错误,但这不应该是必需的,因为TypeScript编译器足够智能,可以在检查时将RHS的类型推断为Promise<number>
。那么为什么当我尝试做这个任务时它并没有对我大喊大叫呢?此外,除了明确指定类型之外,还有其他解决方法吗?我使用的是TypeScript 2.0.9。
答案 0 :(得分:4)
这似乎是known issue(另请参阅#10524,这是此问题的主要跟踪问题),并且链接提交应为fixed in v2.1.2。您应该能够升级,然后按预期正确实施类型。
如果问题在v2.1.x中仍然存在,我的建议是在其问题跟踪器中报告错误。