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

pht*_*ier 4 types typescript

假设我有以下类型声明:

type Foo = 'a' | 'b' | 'c';
type Bar = 'a' | 'b' ;
Run Code Online (Sandbox Code Playgroud)

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

我知道始终可以将表示Foo为的超集Bar,但就我而言,反过来会感觉更符合领域。

Kyl*_*yll 5

您只需要使用Exclude 预定义的条件类型

type Foo = 'a' | 'b' | 'c';
type Bar = Exclude<Foo, 'c'>;

const Bar = 'a';
Run Code Online (Sandbox Code Playgroud)

请注意,即使乍看之下可能感觉不错,以下操作也可以:

type Bar = Exclude<Foo, 'd'>
Run Code Online (Sandbox Code Playgroud)

操场


您也可以将其与索引类型结合使用,以实现有趣的目的:

type Foo = 'a' | 'b' | 'c';
type AnObject = { c: boolean }
type Bar = Exclude<Foo, keyof AnObject>

const myVar: Bar = "a";
Run Code Online (Sandbox Code Playgroud)