簡體   English   中英

Typescript 三元運算符破壞標識類型

[英]Typescript ternary operator breaks identity type

為什么我下面的SupposedId類型不是類型標識?

Typescript 抱怨Type 'T' is not assignable to type 'SupposedId<T>'

為什么T不能分配給TT ,我錯過了什么?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM