【发布时间】:2022-01-03 19:46:18
【问题描述】:
我正在尝试基于设计令牌 JSON 文件创建类型。
JSON 对象的格式如下:
{
"Black": {
"4": { "value": "#f6f6f6" },
"6": { "value": "#f2f2f2" },
"10": { "value": "#e8e8e8" },
"20": { "value": "#d3d3d3" },
"30": { "value": "#bcbcbc" },
"40": { "value": "#a7a7a7" },
"50": { "value": "#909090" },
"60": { "value": "#7b7b7b" },
"70": { "value": "#646464" },
"80": { "value": "#4e4e4e" },
"90": { "value": "#383838" },
"100": { "value": "#222222" }
},
"Blue": {
"4": { "value": "#F5F8F8" },
"8": { "value": "#EBF0F1" },
"10": { "value": "#E5EBED" },
"20": { "value": "#CCD9DC" },
"30": { "value": "#B2C5CA" },
"40": { "value": "#99B3B9" },
"50": { "value": "#7F9FA7" },
"60": { "value": "#668C96" },
"70": { "value": "#4C7984" },
"80": { "value": "#336673" },
"100": { "value": "#004050" }
},
"Teal": {
"20": { "value": "#ccfbf0" },
"40": { "value": "#99f8e1" },
"60": { "value": "#66f4d3" },
"80": { "value": "#33f1c4" },
"100": { "value": "#00edb5" }
}
}
我使用type Color = keyof typeof colorJSON;为颜色创建了一个联合类型
我现在想为颜色对象内的所有嵌套键创建另一个联合类型,这些键是色调级别,例如type Tint = '4' | '6' | '8' etc... 但不知道如何递归地遍历颜色并引用里面的键。
---编辑---
如果 JSON 文件添加了更多颜色,我希望类型自动更新,因此它必须遍历结构而不是直接引用颜色名称
【问题讨论】:
-
它对你有用吗tsplay.dev/NBe84w ?
标签: typescript union-types mapped-types