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

TypeScript/JavaScript Promise返回两种类型?遇void | DocumentClient错误求助

你的两个TypeScript/JavaScript疑问解答

一、Promise是否可以返回两种类型?

当然可以!

在TypeScript中,你可以直接给Promise指定联合类型作为它的resolve结果类型,比如:

// 这个Promise最终要么返回字符串,要么返回数字
const myPromise: Promise<string | number> = new Promise((resolve) => {
  if (Math.random() > 0.5) {
    resolve("Success with string");
  } else {
    resolve(123);
  }
});

当你用await或者.then()处理这个Promise时,TypeScript会提示你需要处理两种可能的类型,避免类型错误。

如果是纯JavaScript的话,因为没有静态类型检查,Promise本身就可以resolve任意类型的值,自然也能返回两种不同类型——只是你需要自己在代码里手动处理类型差异,防止运行时出错。

注意:这里说的是resolve的结果类型,Promise的reject是抛出错误,不属于返回类型范畴哦。

二、类型void | DocumentClient是什么含义?

这是TypeScript的联合类型,意思是某个值的类型只能是以下两种情况之一:

  1. void类型:表示这个值没有实际内容——比如函数没有写return语句,或者写了return;(没有返回值),这时候函数的返回类型就是void。
  2. DocumentClient类型:应该是你代码里引入的某个类/接口(大概率是AWS SDK中的DynamoDB DocumentClient),代表这个值是该类型的实例。

结合你提到的getDocumentClient函数,出现这个类型通常意味着:你的函数在某些代码分支里返回了DocumentClient实例,但在另一些分支里没有返回任何值(或者返回了undefined)。举个典型例子:

function getDocumentClient() {
  if (isConfigValid()) {
    // 这个分支返回DocumentClient实例
    return new DocumentClient({ region: "us-east-1" });
  }
  // 这个分支没有return语句,默认返回void
}

TypeScript会自动推断出这个函数的返回类型是void | DocumentClient。

如果你期望这个函数总是返回DocumentClient实例,那你需要检查函数的所有分支:要么给每个分支都加上返回DocumentClient的逻辑,要么在不满足条件的分支里抛出错误(比如throw new Error("Invalid config")),这样TypeScript就会推断返回类型为DocumentClient,而不是联合类型了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:40:33