You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript定义字符串联合类型数组时出现不兼容错误

TypeScript类型不兼容错误原因解析

问题代码

interface Foo {
  videoType: "A" | "B"
}

interface RS {
  result: Foo[]
}

const fn = (): RS => {
  
  const col = [{
      videoType: 'A',
  }]
  
  return {
    result: col,
  }
}

错误信息

TS2322: Type '{ videoType: string; }[]' is not assignable to type 'Foo[]'.
Type '{ videoType: string; }' is not assignable to type 'Foo'.
Types of property 'videoType' are incompatible.
Type 'string' is not assignable to type "A" | "B".

错误原因

  • TypeScript默认类型推断规则:定义col时未指定明确类型,TypeScript会将videoType的类型推断为宽泛的string,而非期望的字面量类型"A"。这是因为TypeScript默认会为对象属性推断最宽松的基础类型,允许后续修改属性值为同基础类型的其他值。
  • 类型约束不匹配:RS接口要求result的类型是Foo[],其中Foo的videoType是严格的字面量联合类型"A" | "B"。但col被推断为{videoType: string}[],string类型范围远大于"A" | "B",TypeScript无法保证col中的videoType不会被修改为不符合约束的值(比如"C"),因此抛出类型不兼容错误。

验证方式(可选)

给col添加明确类型注解后错误会消失:

const col: Foo[] = [{ videoType: 'A' }]

内容的提问来源于stack exchange,提问作者yiooxir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:30:30