假设我有以下类型声明:
type Foo = 'a' | 'b' | 'c';
type Bar = 'a' | 'b' ;
是否可以表示Bar为的子集Foo?
我知道始终可以将表示Foo为的超集Bar,但就我而言,反过来会感觉更符合领域。
您只需要使用Exclude 预定义的条件类型:
type Foo = 'a' | 'b' | 'c';
type Bar = Exclude<Foo, 'c'>;
const Bar = 'a';
请注意,即使乍看之下可能感觉不错,以下操作也可以:
type Bar = Exclude<Foo, 'd'>
见操场。
您也可以将其与索引类型结合使用,以实现有趣的目的:
type Foo = 'a' | 'b' | 'c';
type AnObject = { c: boolean }
type Bar = Exclude<Foo, keyof AnObject>
const myVar: Bar = "a";