是否可以在typescript中基于其他自定义字符串类型构建动态字符串类型?



我准备了简单的代码来表示这个问题。我有一个类型,它接受一串字符串,我们叫它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-打开分布性