logoProsperBao

Append to object

2022-03-31 03

题目来源(type-challenges)

问题

实现向接口添加新字段的类型。类型接受三个参数。输出应该是具有新字段的对象。

type Test = { id: '1' }
type Result = AppendToObject<Test, 'value', 4> // expected to be { id: '1', value: 4 }

解答

type AppendToObject<T extends object, U extends string, V> = { 
  [K in keyof T|U]: K extends keyof T ? T[K] : V
}

拆分

  1. 首先利用 keyof T 获取到所有的 key 然后和 U 形成联合类型
  2. K in keyof T 为新对象类型的索引
  3. K extends keyof T 为判断 K 是否是 T 的索引如果不是则就是需要新添加的字段