是否可以基于同一对象中的另一个属性Assert该对象的属性?
但是,如何根据type
属性的值推断values
的类型呢?
type StepKeys = "Test1" | "Test2";
interface objectMap {
"Test1": {
name: string
},
"Test2": {
age: number
}
};
interface Step<T extends StepKeys = StepKeys> {
type: T;
value: objectMap[T]
};
const steps: Record<string, Step> = {
"Step1": {
type: "Test1",
value: {
}
}
}
这里values
的类型是{ name: string; } | { age: number; }
的并集。
有可能推断出它的可能值吗?
typescript
2条答案
按热度按时间lb3vh1jj1#
嗨,如果你想有效地区分这个联合,类型参数不应该是一个联合,而是寻求“推”联合一个类型。这是因为我们希望每个
Step
类型有它自己唯一的类型参数,而不是可能的类型参数的联合。所以一个小的变化,但完成你想要的。使用索引访问Map类型,如果有更多的键/值对,您可以自动创建一个有区别的并集。
View on TS Playground
jw5wzhpr2#
唯一能达到你想要的效果的方法不是很好,但它确实有效,问题是你必须手动输入每一个键(这使得它不可能通用或可伸缩)。