假设我有以下类型声明:
type Foo = 'a' | 'b' | 'c';
type Bar = 'a' | 'b' ;
是否可以将Bar
表示为Foo
的子集?
我知道总是可以将Foo
表示为Bar
的超集,但是在我的情况下,反过来会感觉更符合领域。
答案 0 :(得分:4)
您只需使用Exclude
pre-defined conditional type:
type Foo = 'a' | 'b' | 'c';
type Bar = Exclude<Foo, 'c'>;
const Bar = 'a';
请注意,即使乍看之下可能效果不佳,以下操作也可以正常工作:
type Bar = Exclude<Foo, 'd'>
请参见playground。
您也可以将其与index types结合使用以实现有趣的目的:
type Foo = 'a' | 'b' | 'c';
type AnObject = { c: boolean }
type Bar = Exclude<Foo, keyof AnObject>
const myVar: Bar = "a";
答案 1 :(得分:2)
例如
type Bar = Exclude<Foo, 'c'>
(记录在https://www.typescriptlang.org/docs/handbook/advanced-types.html#predefined-conditional-types中)