[英]Typescript: how to define an array of possible keys in type arguments?
我的计划是:
enum hobbies { music = 'music', sports = 'sports' } type Hobbies <T extends Array<keyof typeof hobbies>> = { [key in T]: number } type Musician = { hobbies: Hobbies<["music"]> } type Racer = { hobbies: Hobbies<["racing"]> //errors, fine } const musician: Musician = { hobbies: { music: 2, racing: 1 //should error but it doesn't } }
问题是它实际上确实会抛出错误,但它对key in T
会抛出错误,而且它是无效的。
所以如果我用 hobbies.racing 定义 Musician 就不会出错
有什么解决方案吗?
没有严格回答这个问题,但你可以使用联合类型而不是数组:
enum hobbies {
music = 'music',
sports = 'sports'
}
type Hobbies <T extends keyof typeof hobbies> = {
[key in T]: number
}
type Musician = {
hobbies: Hobbies<"music">
}
type Racer = {
hobbies: Hobbies<"racing"> //errors, fine
}
const musician: Musician = {
hobbies: {
music: 2,
racing: 1 //now errors
}
}
要指定多个允许的键,只需使用联合类型:
hobbies: Hobbies<"music" | "sports">
要回答原始问题并使数组工作:
type Hobbies <T extends Array<keyof typeof hobbies>> = {
[key in T[number]]: number
}
注意key in T[number]
中的键 - 键在数组值中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.