type ConfigItem<T> = {
label: string;
name: keyof T;
};
type P1 = {
E1: {
A: "xl",
B: "xl",
C: "xl",
D: "xl",
},
E2: {
AA: "xxl",
BB: "xxl",
CC: "xxl",
DD: "xxl",
},
};
export const Configs = {
X1: [
{ label: "ax", name: "A2" }, // ⬅️ Why is it not restricted?
{ label: "bx", name: "B" },
{ label: "cx", name: "C" },
{ label: "dx", name: "D2" }, // If the last one is not in E1, an error is reported.
] as ConfigItem<P1["E1"]>[],
X2: [
// ...
]
};只有当数组中的最后一项具有错误的值类型时,才会报告错误。
当最后一项正确时,前一项不正确,则不会报告错误。
"typescript": "^4.4.4"更新:是唯一的方法吗?
const X1: ConfigItem<P1["E1"]> = [
{ label: "ax", name: "A2" },
{ label: "bx", name: "B" },
{ label: "cx", name: "C" },
{ label: "dx", name: "D" },
];
export const Configs = {
X1,
X2: []
};发布于 2021-10-20 10:03:06
当您使用as [[typename]]符号时,不会执行类型检查,因为您正在手动告诉编译器,您确信这是正确的。
要启用类型检查,您要做的是:
type ConfigItem<T> = {
label: string;
name: keyof T;
};
type P1 = {
E1: {
A: "xl",
B: "xl",
C: "xl",
D: "xl",
},
E2: {
AA: "xxl",
BB: "xxl",
CC: "xxl",
DD: "xxl",
},
};
export const Configs: {X1: ConfigItem<P1["E1"]>[], X2: any /*define next here*/} = {
X1: [
{ label: "ax", name: "A2" },
{ label: "bx", name: "B" },
{ label: "cx", name: "C" },
{ label: "dx", name: "D2" },
],
X2: [
// ...
]
};https://stackoverflow.com/questions/69643910
复制相似问题