我正在嘗試制作一種型別,它可以是string | number或者number但絕不是string. 這是我的嘗試,但如您所見,string | number此案只是演變為number. 有沒有辦法表達這一點?
type StringOrNumberOrJustNumber<T extends string | number = string | number>
= T extends number ? T : never;
// This becomes "number" but I'd like it to stay "string | number"
type StringOrNumber = StringOrNumberOrJustNumber<string | number>;
// This becomes "never" as desired, but an error would be even better
type JustString = StringOrNumberOrJustNumber<string>;
// This becomes "number" as desired
type JustNumber = StringOrNumberOrJustNumber<number>;
游樂場鏈接
uj5u.com熱心網友回復:
您將需要另一個條件,并且您還必須將要比較的型別包裝在 中[],使它們成為元組。這是因為如果將它們包裝成元組,它們將不是裸型別,因此不會由條件分布。
還要注意第二個條件,[string | number] extends [T]而不是相反。這是因為您要檢查是否[string | number]可分配給[T],而不是 "[T]可分配給[string | number],因為兩者[string]和[number]都可分配給[string | number]。
type StringOrNumberOrJustNumber<T extends string | number = string | number> = [T] extends [number] ? T : [string | number] extends [T] ? T : never;
不幸的是,我認為僅提供字串時不可能出錯。
無論如何,這里是修改后的游樂場。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510478.html
標籤:打字稿仿制药
