[英]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.