打字稿问题:
给定一个可区分的联合类型
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> = ??????
该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)
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |