Wil*_*ely 7 strong-typing typescript reactjs angular
我有一个字符串联合,看起来像:
type AlphabetLike = 'a' | 'b' | 'c' | 'zeta' | 'beta' | 'gamma' | 'mu';
我希望能够构造类型
type Alphabet = 'a' | 'b' | 'c'。我可以通过使用排除并删除 zeta、beta、gamma 和 mu 来做到这一点,但是需要删除很多东西,如果向 AlphabetLike 添加更多值,它会更改 Alphabet。我想知道我的“AlphabetLike”值是否已从该类型中删除。
有没有办法进行包含而不是排除?
jca*_*alz 11
有一种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"
Run Code Online (Sandbox Code Playgroud)
请注意,没有任何东西强制第二个参数(U此处调用)Extract<T, U>只能Exclude<T, U>包含第一个参数(T此处调用)中的元素。因此,'zzz'上述内容不会对任何事情产生影响。
两个“排除”可以充当包含。
首先,如果您使用排除,则创建要排除的所有项目的列表。
type GreekAlphabet = Exclude<AlphabetLike, 'a' | 'b' | 'c'>
Run Code Online (Sandbox Code Playgroud)
这会产生一个集合:
'zeta' | 'beta' | 'gamma' | 'mu'
我们可以将该集合与 Exclude 结合使用来返回我们想要的值:
type Alphabet = Exclude<AlphabetLike, GreekAlphabet>
Run Code Online (Sandbox Code Playgroud)
这会导致:
如果从“AlphabetLike”中删除正在使用的选项,'a' | 'b' | 'c'
这将有效地保护您。Include<AlphabetLike, 'a'|'b'|'c'>
| 归档时间: |
|
| 查看次数: |
2154 次 |
| 最近记录: |