我有一個字串聯合,它看起來像:
type AlphabetLike = 'a' | 'b' | 'c' | 'zeta' | 'beta' | 'gamma' | 'mu';
我希望能夠構造 type
type Alphabet = 'a' | 'b' | 'c'。我可以通過使用 Exclude 并洗掉 zeta、beta、gamma 和 mu 來做到這一點,但是要洗掉很多東西,如果向 AlphabetLike 添加更多值,它會改變 Alphabet。我想知道我的“AlphabetLike”值是否從該型別中洗掉。
有沒有辦法做一個包含而不是排除?
uj5u.com熱心網友回復:
雙重“排除”可以充當包含。
首先,如果您使用 exclude,請創建一個包含所有要排除的專案的串列。
type GreekAlphabet = Exclude<AlphabetLike, 'a' | 'b' | 'c'>
這導致了一個集合:
'zeta' | 'beta' | 'gamma' | 'mu'
我們可以將該集合與 Exclude 一起使用,以回傳我們想要的值:
type Alphabet = Exclude<AlphabetLike, GreekAlphabet>
這將導致:
如果從“AlphabetLike”中洗掉正在使用的選項,'a' | 'b' | 'c'
這將有效地Include<AlphabetLike, 'a'|'b'|'c'>保護您。
uj5u.com熱心網友回復:
與其將 Alphabet 構造為 AlphabetLike 中的排除型別,不如將 AlphabetLike 構造為不同字母型別的聯合。
type Alphabet = 'a' | 'b' | 'c';
type GreekAlphabet = 'zeta' | 'beta' | 'gamma' | 'mu';
type AlphabetLike = Alphabet | GreekAlphabet;
uj5u.com熱心網友回復:
有一種Extract<T, U>實用程式型別,其作用與實用Exclude<T, U>程式型別相反:
type AlphabetLike = 'a' | 'b' | 'c' | 'zeta' | 'beta' | 'gamma' | 'mu';
type Alphabet = Extract<AlphabetLike, 'a' | 'b' | 'c' | 'zzz'>;
// type Alphabet = "a" | "b" | "c"
請注意,沒有什么會強制第二個引數(此處稱為U)僅包含第一個引數(此處稱為)中的元素Extract<T, U>或Exclude<T, U>僅包含第一個引數中的元素T。因此,'zzz'上述內容對任何事情都沒有影響。
Playground 代碼鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/497017.html
