【发布时间】:2021-10-15 11:18:38
【问题描述】:
我想根据另一个属性的值来限制一个对象属性的类型:
type DataType = "string"|"number"|"date";
type DataTypeMapping = {
"string": string;
"number": number;
"date": string;
}
interface LinkedTypesSample <T extends DataType> {
typ: T;
value: DataTypeMapping[T];
}
现在我可以像这样创建类型检查对象:
const stringInstance: LinkedTypesSample<"string"> = {
typ: "string",
value: "abc"
}
const numberInstance: LinkedTypesSample<"number"> = {
typ: "number",
value: 1
}
问题是 - 是否可以跳过 LinkedTypesSample 的类型参数?
看起来类型参数可能是从typ 推断出来的。
我试图指定(天真的)默认类型参数,如下所示:
interface LinkedTypesSample <T extends DataType = DataType> {
typ: T;
value: DataTypeMapping[T];
}
但在这种情况下,类型检查会停止工作。
编辑:理想情况下,我根本不希望“LinkedTypesSample”公开类型参数。我只是想表达一个简单的想法:一个属性必须根据另一个属性的值或类型具有某种类型。
【问题讨论】:
标签: typescript