[英]Typescript ternary operator breaks identity type
为什么我下面的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>'
}
这是因为分布式条件类型。 SuppedId 分发给T extends any | T extends object
T extends any | T extends object
。 您的案例当然是一个新案例,因为它们实际上都解析为T
,但是条件类型根据T extends object
执行不同的缩小。
但是,根据文档,您可以通过在 extends 关键字的每一侧添加方括号来修复它:
type SupposedId<T> = [T] extends [object] ? T : T;
function makeId<T>(test: T): SupposedId<T> {
/* `test` is now one of `T extends object` or `T extends any`,
not `T extends object | T extends any` */
return test;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.