问题 #
实现一个类型版本的 Object.fromEntries
interface Model {
name: string
age: number
locations: string[] | null
}
type ModelEntries = ['name', string] | ['age', number] | ['locations', string[] | null]
type case1 = ObjectFromEntries<ModelEntries> // Model
解答 #
type ObjectFromEntries<T extends [string, unknown]> = { [K in T as K[0]]: K[1] }
拆分 #
- 传入的的是一个元组的联合类型
- 根据
Object.fromEntries
传入的值,可以确定元组的联合类型的元组第一个类型一定是string
- 索引签名类是将联合类型拆开来
- 这时候索引签名的
K
就是联合类型中的一项元组,可以直接用下标去获取