TypeScript定义多对象数组类型报元素数量不匹配如何解决
报错原因
你最初定义的[{ [key: string]: string }]属于TypeScript的元组类型,这种写法会约束数组长度必须为1,且唯一位置的元素是键值均为string的对象,所以给这个类型赋值长度为2的数组时,会直接抛出长度不匹配的编译错误。
正确定义方式
你需要的是「元素类型统一、长度不固定」的普通数组类型,不需要枚举每一个元素的类型,两种标准写法都能满足需求:
- 数组类型简写(日常开发最常用)
// 表示这是一个数组,每个元素都是键为string、值为string的对象 export type trollType = { [key: string]: string }[];
- 数组泛型写法
export type trollType = Array<{ [key: string]: string }>;
如果数组内的对象有固定的已知属性(比如示例里只有a、b两个字符串属性),可以先定义单个元素的类型,再基于它声明数组类型,类型校验会更精准:
// 先定义单个数组元素的结构 type TrollItem = { a: string; b: string; } // 声明数组类型,支持任意数量的TrollItem元素 export type trollType = TrollItem[];
注意:
[类型A, 类型B]的元组语法仅适用于固定长度、不同位置元素类型可能不同的场景,比如[string, number]用来约束['hello', 123]这种固定结构的数组;如果是长度不定、所有元素结构一致的数组,直接使用上述数组类型写法即可,无论数组包含1个还是上百个元素都能正确通过类型校验。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

