如何基于TypeScript interface构造属性为对应数组类型的自定义type
TypeScript 接口属性批量转数组类型实现方案
基础接口定义
现有所有属性均为基础类型的接口如下:
interface Types { a: number, b: string, c: boolean }
需求说明
需要得到名为Database的类型,结构和上述Types接口完全一致,但每个属性的类型替换为原类型的数组形式,最终效果如下:
{ a: number[], b: string[], c: boolean[] }
错误实现分析
最初尝试的写法如下:
type Database<Key extends keyof Types> = Record<Key, Array<Types[Key]>>
该写法的问题是使用Database类型时必须传入泛型参数,无法直接无参数使用。
正确实现方案
通过自定义映射类型实现,代码如下:
interface Types { a: number, b: string, c: boolean } type ValueToArray<T> = { [K in keyof T]: Array<T[K]>; }; type Database = ValueToArray<Types>;
内容的提问来源于stack exchange,提问作者Drarig29
相关产品推荐
相关产品推荐

