【问题标题】:Is there a way in TypeScript to say "Include" (opposite of Exclude)?TypeScript 中有没有办法说“包含”(与排除相反)?
【发布时间】:2022-06-29 02:56:31
【问题描述】:
我有一个字符串联合,看起来像:
type AlphabetLike = 'a' | 'b' | 'c' | 'zeta' | 'beta' | 'gamma' | 'mu';
我希望能够构造类型
type Alphabet = 'a' | 'b' | 'c'。我可以通过使用 Exclude 并删除 zeta、beta、gamma 和 mu 来做到这一点,但是要删除很多东西,如果向 AlphabetLike 添加更多值,它会改变 Alphabet。我想知道我在“AlphabetLike”中的值是否曾经从该类型中删除。
有没有办法执行包含而不是排除?
【问题讨论】:
标签:
reactjs
angular
typescript
strong-typing
【解决方案1】:
双重“排除”可以充当包含。
首先,如果您使用 exclude,请创建一个包含所有要排除的项目的列表。
type GreekAlphabet = Exclude<AlphabetLike, 'a' | 'b' | 'c'>
这会产生一个集合:
'zeta' | 'beta' | 'gamma' | 'mu'
我们可以将该集合与 Exclude 一起使用,以返回我们想要的值:
type Alphabet = Exclude<AlphabetLike, GreekAlphabet>
这会导致:
'a' | 'b' | 'c'
这实际上是Include<AlphabetLike, 'a'|'b'|'c'>,如果正在使用的选项从“AlphabetLike”中删除,它将保护您。