我正在尝试创建一个类型转换,它将字符串数组转换为一个对象,其中键是字符串的值。
type ObjectFromKeys<T extends Array<string>> = {
[K in keyof T]: string
}
declare const o: ObjectFromKeys<['foo']>
o.foo // Property 'foo' does not exist on type '[string]'
编辑它似乎这样工作:
type ObjectFromKeys<T extends Array<string>> = {
[K in T as any]: string
}
这似乎不安全,这是正确的做法吗?
编辑,但如果访问的值不在数组中,它不会抛出
type ObjectFromKeys<T extends Array<string>> = {
[K in T as any]: string
}
declare const o: ObjectFromKeys<['foo']>
o.bar // This should fail
您非常接近答案,您所要做的就是将Array<string>
转换为并集,这可以通过T[number]
完成。见下文:
type ObjectFromKeys<T extends Array<string>> = {
[K in T[number]]: string
}
游乐场链接