【发布时间】:2021-11-23 01:27:57
【问题描述】:
我有一个变量是数组的对象:
cssColorsObject = {
red: ["lightsalmon", "salmon", "darksalmon", "lightcoral", "indianred", "crimson", "firebrick", "red", "darkred"],
orange: ["coral", "tomato", "orangered", "gold", "orange", "darkorange"],
yellow: [...
}
我想为未来的对象变量创建一个类型/接口,其中包含一些键(例如“red”、“orange”、“yellow”)以及部分或全部键颜色的属性,例如:
{
red: ["lightsalmon", "salmon"], // OK
orange: [], //OK
yellow: ["lightsalmon"], // NOT OK - because light salmon is a color associated with the "red" key in the original object
}
我已经解决了以下问题:
type CssColorKeys = keyof typeof cssColorsObject; // = "red" | "orange" | "yellow" | "green" , etc
type CssColorValues = typeof cssColorsObject[CssColorKeys][number]; // = "lightsalmon" | "salmon"... | "maroon"
type NewRecord = Record<CssColorKeys, CssColorValues> // Not what I want as this requires all properties and the exact same array.
我想我需要使用部分,但我正在努力在这里实现它们。
完全感谢@captain-yossarian 在下面的回答。我只是想根据他的回答添加一个简化的解决方案:
type CssColorsPartial = Partial<{
[Prop in keyof typeof cssColorsObject]: Array<typeof cssColorsObject[Prop][number]>;
}>;
我为具有强制键和可选数组值here 的映射类型创建了另一个type
【问题讨论】:
-
请分享具有预期和意外行为(预期编译器错误)的完全可重现示例
标签: javascript arrays typescript object partials