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的联合类型,意思是某个值的类型只能是以下两种情况之一:
void类型:表示这个值没有实际内容——比如函数没有写return语句,或者写了return;(没有返回值),这时候函数的返回类型就是void。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
相关产品推荐
相关产品推荐

