让我们假设如下:
enum MouseType {
PRODUCTIVITY = 1,
GAMING = 2,
}
enum KeyboardType {
PRODUCTIVITY = 3,
GAMING = 4,
}
interface MouseSpec {
buttons: number;
dpi: number;
}
interface KeyboardSpec {
keys: number;
}
type CustomData = {
[key in MouseType | KeyboardType]: MouseSpec | KeyboardSpec;
}如何更改CustomData以确保最后一项触发错误?
const data: CustomData = {
[MouseType.PRODUCTIVITY]: { buttons: 4, dpi: 800 }, // ok
[MouseType.GAMING]: { buttons: 6, dpi: 1600 }, // ok
[KeyboardType.PRODUCTIVITY]: { keys: 78 }, // ok
[KeyboardType.GAMING]: { keys: 120 }, // ok
[MouseType.PRODUCTIVITY]: { keys: 999 }, // should not be ok
};发布于 2020-11-13 00:20:00
这里的问题是
[key in MouseType | KeyboardType]: MouseSpec | KeyboardSpec允许将KeyboardSpecs映射到MouseType。
一个可能的解决方案是创建两个独立的索引类型,将鼠标/键盘类型映射到它们的规范中:
type MouseData = {
[key in MouseType]: MouseSpec;
}
type KeyBoardData = {
[key in KeyboardType]: KeyboardSpec;
}然后将所需的CustomData创建为两个索引类型的交叉类型:
type CustomData = MouseData & KeyBoardData 使用这种新的CustomData类型,您将得到所需的错误消息。
https://stackoverflow.com/questions/64813564
复制相似问题