You need to enable JavaScript to run this app. TypeScript中如何正确返回携带ParsedAuthorizationResponse类型的Promise?
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何正确返回携带ParsedAuthorizationResponse类型的Promise?

错误写法根因分析
  • 第一种写法的核心问题:
    1. 泛型传参错误:Promise<PAR> 把已声明的运行时变量PAR当作类型传入,TS泛型要求尖括号内传入类型定义而非变量
    2. 未定义结构就直接实例化:new ParsedAuthorizationResponse 没有提前声明对应类/类型的结构,TS会直接报找不到标识符的错误
    3. 缺少Promise值绑定:仅写了Promise泛型占位,没有把实际的解析结果作为Promise的resolve返回值
  • 第二种写法的核心问题:
    1. 类型定义语法错误:type ParsedAuthorizationResponse PAR = 'AUTHORIZED' 不符合TS类型定义规范,正确语法为type 类型名 = 类型结构,中间多余插入了未定义的PAR标识
    2. 引用不存在的类型:new Promise<PAR> 中的PAR没有对应的类型定义,TS无法识别
正确实现方案

根据你需要的ParsedAuthorizationResponse结构,分两种常见场景实现:

场景1:ParsedAuthorizationResponse为固定取值的字面量联合类型

适合需要定义固定可选返回值的场景,代码实现:

// 第一步:明确定义ParsedAuthorizationResponse的可选取值
type ParsedAuthorizationResponse = 
  | 'AUTHORIZED'
  | 'DENIED'
  | 'PENDING'; // 可按需扩展其他取值

// 第二步:按需求返回对应Promise
async function parseAuthStatus(status: string): Promise<ParsedAuthorizationResponse> {
  if (status === 'COMPLETED') {
    // 直接返回匹配类型的实际值,TS会自动做类型校验
    return 'AUTHORIZED';
  }
  throw new Error('Authorization failed');
}

场景2:ParsedAuthorizationResponse为可实例化的类结构

适合需要给返回值挂载方法/属性的场景,代码实现:

// 第一步:定义ParsedAuthorizationResponse类的结构
class ParsedAuthorizationResponse {
  readonly authStatus: 'AUTHORIZED' | 'DENIED';
  constructor(authStatus: 'AUTHORIZED' | 'DENIED') {
    this.authStatus = authStatus;
  }
}

// 第二步:返回绑定了实例的Promise
function parseAuthStatus(status: string): Promise<ParsedAuthorizationResponse> {
  if (status === 'COMPLETED') {
    // 将实例作为resolve值传入Promise
    return Promise.resolve(new ParsedAuthorizationResponse('AUTHORIZED'));
  }
  // 错误场景通过reject返回,和抛出异常效果一致
  return Promise.reject(new Error('Authorization failed'));
}
关键注意事项
  • Promise泛型尖括号内永远传入类型定义,禁止传入运行时变量
  • 自定义类型必须通过type或class语法提前声明结构,不能隐式使用
  • 必须通过Promise.resolve(实际值)或async函数return值的方式,把需要返回的内容绑定到Promise的结果中,不能仅写空的Promise占位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 15:54:01