TypeScript函数中使用array.map报TS2740错误如何解决
报错原因
你的类型标注写法错误:声明transformArray时,直接给变量标注了Object2[]类型,相当于告诉TypeScript这个变量本身是由Object2类型元素组成的数组,但实际给变量赋值的是一个箭头函数,属于函数类型。
TypeScript做类型检查时发现,赋值的函数不存在数组类型自带的pop、push、concat、join等内置方法,和声明的Object2[]类型完全不匹配,因此抛出错误。报错末尾提示「是否要调用该表达式」,是TypeScript识别到你给数组类型的变量赋值了未执行的函数,猜测可能漏写了函数调用括号。
修复方法
把类型标注调整到正确位置,声明transformArray为接收Object1[]类型入参、返回Object2[]类型结果的函数即可,两种常用正确写法如下:
- 给变量标注完整函数类型
interface Object1{ id:number, label:string } interface Object2{ id:number, description:string } const transformArray: (input: Object1[]) => Object2[] = (input) => { return input.map(item => { return { id: item.id, description: item.label } }) }
- 直接给函数的入参、返回值标注类型,TypeScript会自动推导变量的函数类型
interface Object1{ id:number, label:string } interface Object2{ id:number, description:string } const transformArray = (input: Object1[]): Object2[] => { return input.map(item => ({ id: item.id, description: item.label })) }
两种写法效果完全一致,都能实现预期的类型约束:调用函数时传入Object1类型的数组,返回值会被TypeScript正确识别为Object2类型的数组。
内容的提问来源于stack exchange,提问作者Joshua Augustinus
相关产品推荐
相关产品推荐

