由对象和字符串组成的混合数组的正确TypeScript类型如何定义?
错误原因
你给出的类型定义存在两个问题:
- 语法错误:外层额外包裹了
{},把数组类型错误定义成了对象类型,内部属性写法也不符合TypeScript语法规范 - 类型匹配错误:仅定义了对象类型的数组成员,没有覆盖数组中存在的
string类型成员,因此触发Type 'string' is not assignable to type报错
正确类型定义
根据数组的使用场景可以分为两种定义方式:
1. 数组长度、元素顺序固定(元组类型)
如果你的数组固定为「第一个元素是键为字符串、值为字符串数组的对象,后两个元素为字符串」的结构,使用元组类型定义最精确:
// 通用对象写法(适用于对象键不固定的场景) type Arr = [ { [key: string]: string[] }, string, string ] // 更精确的写法(已知对象键固定为name时使用) type Arr = [ { name: string[] }, string, string ]
2. 数组长度不固定、元素任意排列
如果数组元素可以是「指定结构对象」或「字符串」任意组合、长度不固定,使用联合类型数组:
// 通用对象写法 type Arr = ({ [key: string]: string[] } | string)[] // 键固定为name的精确写法 type Arr = ({ name: string[] } | string)[]
内容的提问来源于stack exchange,提问作者user15043202
相关产品推荐
相关产品推荐

