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

TypeScript对象映射函数编译报错:‘Expected an assignment or function call and instead saw an expression’问题求解

解决TypeScript编译错误:Expected an assignment or function call and instead saw an expression

嘿,我来帮你拆解这个问题~你遇到的这个编译错误,本质是TypeScript认为你写了一段“没有实际用途的表达式”——也就是那个三元运算符的结果既没被赋值给变量,也没被当作函数调用,属于无效代码。

先说说你代码里的两个核心问题:

  • 误用了map方法:map的设计目的是返回一个新数组,它会把回调函数的返回值收集起来生成新数组。但你现在是把map当forEach用,只在里面做listpush.push()的副作用操作,而且三元表达式的else分支返回了null,这些null会被map收集,但你又没用到这个生成的数组,这就导致了无意义的表达式出现。
  • 函数名用了关键字:你把函数命名为function,这是TypeScript的保留关键字,本身就会引发语法错误,得改成合法的名字比如processList之类的。

两种修复方案供你选:

方案1:换成forEach做遍历(适合需要副作用的场景)

既然你只是想遍历并往数组里push元素,用forEach更合适,它不需要回调函数返回值,也就不会产生无意义的表达式:

// 注意:把函数名改成合法的名字,比如processList
const processList = (list: IListType | undefined) => { 
  let listpush: AType[] = [] 
  list?.item.forEach(it => {
    // 用if判断替代三元表达式,更清晰,也不会返回多余的null
    if (it.values && it.values?.key && it.values?.value) {
      listpush.push({ 
        attr1: it.name, 
        attr2: it.values.key, 
        attr3: it.values.value, 
      })
    }
  }) 
}

方案2:正确使用map+filter(函数式风格,更简洁)

如果你的目标是生成符合条件的新数组,直接用filter先筛选出合格的项,再用map转换结构,完全不需要手动维护listpush变量:

const processList = (list: IListType | undefined): AType[] => { 
  // 先过滤出符合条件的项,再转换结构,最后返回空数组兜底
  return list?.item
    ?.filter(it => it.values && it.values?.key && it.values?.value)
    .map(it => ({ 
      attr1: it.name, 
      attr2: it.values.key, 
      attr3: it.values.value, 
    })) || []
}

最后再强调下错误根源:

TypeScript的这个报错就是在提醒你:“你写了一段表达式,但它的结果没被使用,这可能是个bug哦”。要么是你用错了遍历方法,要么是你留下了不必要的表达式(比如那个返回null的三元分支),调整之后就能解决啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:47:30