将 Convert 和 Array<string> 类型转换为对象,其中键是数组的字符串



我正在尝试创建一个类型转换,它将字符串数组转换为一个对象,其中键是字符串的值。

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
}

游乐场链接

最新更新