问题 #
实现向接口添加新字段的类型。类型接受三个参数。输出应该是具有新字段的对象。
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
}
拆分 #
- 首先利用
keyof T
获取到所有的key
然后和U
形成联合类型 K in keyof T
为新对象类型的索引K extends keyof T
为判断K
是否是T
的索引如果不是则就是需要新添加的字段