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

TypeScript类型报错:Property val1不存在于void | Value类型

问题解决建议

核心问题分析

你遇到的类型错误根源有两个:

  1. myFunction的返回类型被错误指定为Promise<Value | void>,但实际上throwError函数会直接抛出异常,不会产生返回值,myFunction要么成功返回Value,要么抛出异常,永远不会返回void。
  2. catch块里的return throwError(e)是冗余写法,throwError本身会抛出异常,return语句永远不会被执行到,反而让TypeScript错误推断可能存在void返回值。

具体修复步骤

1. 修正myFunction的代码

去掉catch块中的return,直接调用throwError,并修正返回类型:

async function myFunction(
  a: A,
  b: B
): Promise<Value> { // 明确返回类型为Promise<Value>
  try {
    const variable = await getSomething(a,b);
    return getValue(variable);
  } catch(e) {
    throwError(e); // 去掉return,直接抛出异常
  }
}

如果不想手动指定返回类型,TypeScript也能自动推断出正确的Promise<Value>,因为失败路径没有返回值,只有抛出。

2. 优化anotherFunction的异常处理(可选但推荐)

如果anotherFunction需要处理myFunction抛出的异常,可以添加try/catch块,避免未捕获异常:

async function anotherFunction() {
  // do some stuff
  try {
    const { val1 } = await myFunction(x, y);
    // do rest stuff
  } catch (e) {
    // 处理异常逻辑,比如打印日志、提示用户等
    console.error('调用myFunction失败:', e);
  }
}

为什么这样修复有效

  • 去掉return后,myFunction的失败路径不再有"返回值"的假象,TypeScript能正确识别函数只会返回Value或抛出异常。
  • 明确返回类型后,await myFunction(x, y)的结果类型就是Value,解构时不会再出现void | Value的类型冲突。

内容的提问来源于stack exchange,提问作者karo-s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:21:11