TS2322错误:Type 'A | A[]'无法赋值给类型'A'的排查与修复
TypeScript类型不兼容问题原因及修复方案
问题原因
接口IProps中定义的f是一个需要接收A | A[]类型参数的函数,但你实现的aFunc仅支持接收A类型参数。
TypeScript的函数类型遵循逆变规则:当把一个函数赋值给另一个函数类型时,前者的参数类型必须能覆盖后者的参数类型(即更宽泛)。这里props.f被调用时可能传入A[],但aFunc无法处理数组类型,所以类型检查报错。
修复方案
- 方案一:让
aFunc兼容A | A[]参数,内部区分处理两种情况
const aFunc = (arg: A | A[]): B => { if (Array.isArray(arg)) { // 处理A[]类型的逻辑 } else { // 处理单个A类型的逻辑 } };
- 方案二:如果业务逻辑确定
props.f只会接收A类型参数,修改接口定义
interface IProps { f: (arg: A) => B }
- 方案三(不推荐):用类型断言绕过类型检查(可能引入潜在bug)
props: IProps = { f: aFunc as (arg: A | A[]) => B }
内容的提问来源于stack exchange,提问作者Cinny
相关产品推荐
相关产品推荐

