从两个可区分的联合创建矩阵类型

Create matrix type from two discriminated unions

我在 TypeScript 中有两个可区分的联合:

type Person = "alice" | "bob"
type Number = 1 | 2

从这两个可区分的联合中,如何从所有可能的组合中创建一个新的可区分的联合:

type Desired = "alice-1" | "bob-1" | "alice-2" | "bob-2"

理想情况下 Desired 不是硬编码的,因为 PersonNumber 可能会变得相当大。如果需要,Number 可以是字符串联合 "1" | "2".

您可以只应用模板文字类型,您将获得所需的类型:

type Person = "alice" | "bob"
type Number = 1 | 2

type Desired = `${Person}-${Number}`

Playground Link

此功能自 4.1 起在 Typescript 中可用,并添加了 Template literal types and mapped type 'as' clauses