簡體   English   中英

字符串文字類型與字符串類型的聯合

[英]String Literal Types union with string type

我想在我的組件道具中的一些預定義顏色上使用 typescript 的智能感知。 但是用戶也可以將任何十六進制顏色傳遞給該道具。

type PREDEFINED_COLORS = 'success' | 'error' | 'info';

type Props = {
   color: PREDEFINED_COLORS | string;
}

我知道PREDEFINED_COLORS也是一個字符串,但我相信應該有一些解決方法來實現智能感知的好處。

你有什么建議嗎?

您最安全的選擇是使用templated string type 像這樣的東西:

type PREDEFINED_COLORS = 'success' | 'error' | 'info';

type Props = {
   color: PREDEFINED_COLORS | `#${string}`;
}

您可以嘗試進一步縮小類型,創建一個 hexDigit,然后從那里構建整個類型。 像這樣的東西:

type hexDigit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f'
type hexColor = `#${hexDigit}${hexDigit}${hexDigit}${hexDigit}${hexDigit}${hexDigit}`

這樣做的問題是 TS 將生成hexDigit類型的整個叉積,最終將成為一個巨大的類型。 更確切地說,它將有 2^32 個項目,遠遠高於他們擁有的 100k 限制。 你可以在這里了解更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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