打字稿问题:
给定一个受歧视的联合类型
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
我该怎么写SubsetOfU
提取联合类型的子集?
当然,我并不是在解决这里的具体情况之后(只是A|B
),但是更复杂的场景。
type SubsetOfU<K extends Discriminator> = ??????
The Extract
预定义类型已经定义并且可以执行您想要的操作:
type U = A | B | C;
type Discriminator = U["discriminator"];
type AorB = Extract<U, { discriminator: "A" | "B" }>;
const f = (d:AorB) => d.data;
游乐场链接 https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgILIN4Chm+QE2AGcEpgBbUOMAeygC5kAiVJgbhz32rkaLDIgA5hwC+WLKEixEKAEKZOuQiTKUQ1OoyZz2Sgjz4DQIrOMnho8JMgDCivAWKkKVWg2a29jkAFdyjH7kAEbQYhJgAJ4ADigAqsgAvGjIAD7ICum2HFGxyAAizmpudEnIcQDaTCou6ppQTAC6HFi5KKh0CskAogAeAohgADxxADSYTqquGu7arGnMusiiAHwtCDQg-MgwZQAU+PQdUHIAlEkrBAB03GBwbEA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)