您可以从现有类型中创建更小,更受限制的类型吗?

时间:2019-07-15 09:13:57

标签: typescript types

假设我有以下类型声明:

type Foo = 'a' | 'b' | 'c';
type Bar = 'a' | 'b' ;

是否可以将Bar表示为Foo的子集?

我知道总是可以将Foo表示为Bar的超集,但是在我的情况下,反过来会感觉更符合领域。

2 个答案:

答案 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)