我准备了简单的代码来表示这个问题。我有一个类型,它接受一串字符串,我们叫它Names:
type Names = "field1" | "field2";
现在我需要构建一个类型,它也将接受一堆基于Names
类型的新字符串。
type Names = "field1" | "field2";
type FieldsNames =
| "field1_created"
| "field1_updated"
| "field1_deleted"
| "field2_created"
| "field2_updated"
| "field2_deleted";
可以看到,对于每个字符串(field1, field2),我需要构建一个接受另外三种字符串类型的类型。这已经可以长得很快了。
是否有一种方法,例如,从Names
类型提取键,并基于此,创建新的自定义类型?如果有,如何使用打字稿?
您需要使用分布条件类型:
type Names = "field1" | "field2";
type Prefix = 'created' | 'updated' | 'deleted'
type FieldsNames =
| "field1_created"
| "field1_updated"
| "field1_deleted"
| "field2_created"
| "field2_updated"
| "field2_deleted";
type Builder<T extends string> = T extends any ? `${T}_${Prefix}` : never
// Result is the same as FieldsNames
type Result = Builder<Names>
type Assert<T, _ extends T> = T
type Test = Assert<Result, FieldsNames> // ok
游乐场
T extends any
-打开分布性