【发布时间】:2018-10-20 02:56:18
【问题描述】:
TypeScript 中的基本类型推断非常简单:
const bar = foo(); // bar: <type that foo returns>
考虑到泛型参数默认值为{},可以合理地预期下面的代码会导致类型错误,因为回调函数返回number而不是{}:
function foo<T = {}>(callback: () => T): T {
return callback();
}
let bar = foo(() => 1); // bar: number
但已知T是从回调返回值推断出来的,它是:
function foo<number>(callback: () => number): number
这究竟是如何发生的,这种行为是在哪里规定的?来自 TypeScript 开发人员的文档或解释中的引述将不胜感激。
是否可以强制T 为默认值({} 或<T = ...> 中指定的任何值)而不是在foo(() => 1) 调用中推断?在某些情况下,这可能是理想的行为。
如果 TypeScript 中有其他反直觉的推理案例,也欢迎提及。
【问题讨论】:
标签: typescript