为何这段TypeScript代码类型匹配?索引签名与具体对象数组对比
TypeScript类型兼容问题解答
第一段代码无类型报错的原因
你第一段代码的返回类型是{ [key: string]: string }[],也就是“元素为任意字符串键对应string值的对象”的数组。而你push的{ prop1: string, prop2: string }对象,完全符合这个索引签名的要求——它的所有属性值都是string类型,属于前者的子类型。TypeScript允许子类型赋值给父类型,所以不会出现类型不匹配的报错。
是否更推荐第二段代码?
是的,非常推荐第二段写法,核心原因有两点:
- 类型信息更明确:返回类型精准指定了每个对象必须包含
prop1和prop2两个string类型属性,调用这段代码的地方能清晰知道可访问的属性,编辑器也能提供准确的代码补全提示。 - 错误提前拦截:如果后续修改代码时,不小心push了缺少
prop1/prop2、或者属性类型不符的对象,TypeScript会立刻抛出类型错误,帮你在开发阶段就发现问题,避免运行时bug。
内容的提问来源于stack exchange,提问作者Sergino
相关产品推荐
相关产品推荐

