78. 映射对象属性类型
中等
实现一个通用的工具类型 MapTypes<T, R>
,该类型将对象 T
中的类型转换为由类型 R
定义的不同类型,R
的结构如下:
type StringToNumber = {
mapFrom: string; // 值为 string 的键
mapTo: number; // 将转换为 number
}
例如:
type StringToNumber = { mapFrom: string; mapTo: number; }
type Res = MapTypes<{ iWillBeANumberOneDay: string }, StringToNumber>
// expected to be { iWillBeANumberOneDay: number; }
请注意,还可以是一个联合类型:
type StringToNumber = { mapFrom: string; mapTo: number; }
type StringToDate = { mapFrom: string; mapTo: Date; }
type Res = MapTypes<{ iWillBeNumberOrDate: string }, StringToDate | StringToNumber>
// expected to be { iWillBeNumberOrDate: number | Date; }
如果类型在我们的映射中不存在,则保持不变:
type StringToNumber = { mapFrom: string; mapTo: number; }
type Res = MapTypes<{ iWillBeANumberOneDay: string, iWillStayTheSame: Function }, StringToNumber>
// expected to be { iWillBeANumberOneDay: number, iWillStayTheSame: Function }