【发布时间】:2017-06-04 13:07:56
【问题描述】:
这在 TypeScript 2.1.5 中编译没有错误:
function promiseANumber(): Promise<number> {
return new Promise(resolve => resolve('definitely not a number'));
}
我希望会报告一个错误,因为根据类型定义,解析函数是用字符串而不是数字调用的。
为什么 TypeScript 的编译器没有捕获和报告这种类型不匹配?
编辑 1
再看一下,改用异步函数定义,编译器会正确报告类型不匹配。所以这个:
async function promiseANumber(): Promise<number> {
return 'definitely not a number';
}
给予
error TS2322: Type '"definitely not a number"' is not assignable to type 'number'.
为什么这些案例表现不同?
编辑 2
这看起来像是让编译器正确捕获它以明确告诉它您要返回的承诺类型的方法。所以这就足够了:
function promiseANumber() {
return new Promise<number>(resolve => resolve('definitely not a number'));
}
编译器现在抱怨的:
error TS2345: Argument of type '"definitely not a number"' is not assignable to parameter of type 'number | Thenable<number>'.
我想我现在的问题是,考虑到我在这个问题开头给出的定义,为什么编译器不能推断这一点?
编辑 3
令人高兴的是,TypeScript 2.4 现在为我的原始代码指出了正确的错误!这是因为它现在支持return types as inference targets。该公告甚至有一个与我最初给出的示例非常相似的代码示例。
【问题讨论】:
标签: typescript