能否从非数组类型的TypeScript接口创建数组类型新接口?
当然可以不用手动编写,借助TypeScript的类型工具就能基于Whatever生成目标接口,下面给你两种实用的实现方式:
- 批量将所有属性转为数组类型(适合
Whatever所有属性都需要转成数组的场景):
type LoadsOfWhatever = { [K in keyof Whatever]: Whatever[K][] };
这个映射类型会遍历Whatever的所有属性键,把每个属性的类型都包装成数组。
- 仅修改指定属性为数组类型(适合只需要调整
meh属性,保留其他原有属性的场景):
type LoadsOfWhatever = Pick<Whatever, Exclude<keyof Whatever, 'meh'>> & { meh: Whatever['meh'][] };
这里先用Pick和Exclude保留Whatever中除meh外的所有属性,再通过交叉类型把meh的类型替换成数组版本,后续如果Whatever新增其他属性,这个类型会自动同步,不用手动修改。
如果你的Whatever只有meh这一个属性,两种写法效果完全一致,但第二种在接口扩展时更灵活。
内容的提问来源于stack exchange,提问作者Joseph Beuys' Mum
相关产品推荐
相关产品推荐

