TS中如何将Promise<Type2>转换为Promise<Type1>返回?写法是否正确?
解答
你给出的写法完全正确,可以满足返回Promise<Type1>的类型要求。
原理说明
Promise的链式调用天然支持这种值与类型的转换:then方法本身会返回一个全新的Promise实例,这个新Promise的最终兑现值,就是你传入then的回调函数的返回值。
- 只要你在回调里完成Type2到Type1的转换逻辑、返回符合Type1类型约束的对象,整个链式调用最终返回的Promise就会被TypeScript自动推导为
Promise<Type1>,和function1的返回值类型要求完全匹配。
等价写法参考
如果你更习惯async/await的同步书写风格,也可以用下面的方式实现,运行效果和类型表现完全一致:
async function function1(): Promise<Type1> { const type2Result: Type2 = await function2(); // 此处编写Type2转Type1的具体逻辑 const type1Result: Type1 = /* 转换完成的Type1类型对象 */; return type1Result; }
注意事项
- 不要遗漏回调里的
return,如果回调没有返回转换后的Type1对象,最终Promise的兑现值会变成undefined,不管是TypeScript编译校验还是实际运行逻辑都会出问题。 - 如果转换过程本身包含异步操作(比如还要调用其他异步接口),直接在回调里返回对应的Promise实例即可,TypeScript会自动展平嵌套的Promise类型,最终返回值依然是
Promise<Type1>。
内容的提问来源于stack exchange,提问作者tomography
相关产品推荐
相关产品推荐

