为什么下面的SupposedId
类型不是类型标识?
typescript 抱怨Type 'T' is not assignable to type 'SupposedId<T>'
。
为什么T
不能分配给T
或T
,我错过了什么?
type SupposedId<T> = T extends object ? T : T;
function makeId<T>(test: T): SupposedId<T> {
return test // <- Type 'T' is not assignable to type 'SupposedId<T>'
}
Playground示例
1条答案
按热度按时间rqqzpn5f1#
这是因为分布式条件类型。SupposedId分布到
T extends any | T extends object
。您的情况肯定是一个新的情况,因为它们实际上都解析为T
,但条件类型根据是否为T extends object
执行不同的收缩。但是,根据文档,您可以通过在extends关键字的两侧添加方括号来修复它: