【发布时间】:2023-03-15 09:31:01
【问题描述】:
考虑如下界面:
interface Theme {
color: {
primary: {
light: string
base: string
dark: string
}
secondary: {
lighter: string
light: string
base: string
dark: string
darker: string
}
}
}
我正在尝试编写一个允许元组的类型,第一个元素映射到 colors 中的任何键,第二个映射到该键下的任何键(即:base)。
即:
['primary', 'light'] ✅ valid
['secondary', 'darker'] ✅ valid
['primary', 'darker'] ???? invalid
这是我在tsplayground 上所做的尝试,我在这里面临的问题是,如果我想允许多个键作为第一个参数传递,那么第二个需要满足所有第一个。有没有办法告诉打字稿使用作为类型传递的文字值?
type PickThemeColor<C extends keyof Theme['color'] = keyof Theme['color']> = [
C,
keyof Theme['color'][C]
]
// ???????? this complains because 'darker' doesnt appear in both 'primary' and 'secondary' keys
const x: PickThemeColor<'primary' | 'secondary'> = ['secondary', 'darker']
【问题讨论】:
标签: typescript typescript-generics