根据判别器的子集获取判别联合的子集

Pel*_*lle 4 typescript

打字稿问题:

给定一个可区分的联合类型

interface A {
    discriminator: "A";
    data: string;
}

interface B {
    discriminator: "B";
    data: string;
}

interface C {
    discriminator: "C";
    num: number;
}

type U = A | B | C;
type Discriminator = U["discriminator"];

type AorB = SubsetOfU<"A"|"B">;

const f = (d:AorB) => d.data; // Should work

Run Code Online (Sandbox Code Playgroud)

如何编写SubsetOfU以提取联合类型的子集?

当然,我不是在这里解决特定案例(可能只是A|B),而是一个更复杂的场景。

type SubsetOfU<K extends Discriminator> = ??????

Tit*_*mir 7

Extract预定义类型已经定义了你想要做什么:

type U = A | B | C;
type Discriminator = U["discriminator"];

type AorB = Extract<U, { discriminator: "A" | "B" }>;

const f = (d:AorB) => d.data;
Run Code Online (Sandbox Code Playgroud)

游乐场链接