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

如何使用TypeScript泛型移除类型中的Promise包装?

用TypeScript泛型移除Promise包装类型

你可以通过自定义泛型工具类型,结合TypeScript的条件类型与infer关键字,提取Promise包裹的内部类型,从而去掉Promise包装。

基础版泛型工具类型

先定义一个能提取单层Promise内部类型的泛型:

type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
  • 逻辑:如果T是Promise<U>类型,则返回内部的U;如果不是Promise类型,直接返回T本身。

应用到你的代码

结合ReturnType工具类型获取函数返回值类型,再用UnwrapPromise提取内部类型:

async function get_string() {
  return "hellow";
}

// 标注变量类型为提取后的string
var the_string: UnwrapPromise<ReturnType<typeof get_string>> = get_string() as UnwrapPromise<ReturnType<typeof get_string>>;

这里的类型断言是因为TS不知道你的解释器会自动解析Promise,需要手动告知TS变量实际是原始值类型。

支持嵌套Promise的递归版本

如果你的解释器会自动解析嵌套的Promise(比如Promise<Promise<string>>),可以用递归泛型处理:

type UnwrapPromise<T> = T extends Promise<infer U> ? UnwrapPromise<U> : T;

这个版本会逐层解析Promise,直到提取出最内层的非Promise类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:43:13