我想使用函数的返回类型在界面上键入一个项目,如下所示:
const returnsPromise = async (): Promise<string> => {
return Promise.resolve('I want the string type and not a Promise')
}
interface Myinterface {
message: ReturnType<typeof returnsPromise>
}
Run Code Online (Sandbox Code Playgroud)
但是,消息的类型是Promise而不是string。人们可以得到 Promise 应该解决的类型吗?
jca*_*alz 24
TypeScript 4.5 引入了typeAwaited<T>
,如果您输入await
type 的值,它就T
会计算出您获得的类型。所以你可以写:
interface Myinterface {
message: Awaited<ReturnType<typeof returnsPromise>>;
// (property) Myinterface.message: string
}
Run Code Online (Sandbox Code Playgroud)
如果您还没有 TypeScript 4.5,您始终可以使用条件类型推断Promise
自行“取消”类型:
type Unpromise<T> = T extends Promise<infer U> ? U : never;
interface Myinterface {
message: Unpromise<ReturnType<typeof returnsPromise>>;
// (property) Myinterface.message: string
}
Run Code Online (Sandbox Code Playgroud)
string
当你传入 时,它们都会产生Promise<string>
。对于更复杂的类型(例如嵌套Promise
),它们会产生不同的结果:
type APPs = Awaited<Promise<Promise<string>>>; // type APPs = string
type UPPs = Unpromise<Promise<Promise<string>>>; // type UPPs = Promise<string>
Run Code Online (Sandbox Code Playgroud)
因此,是否需要递归地计算“承诺解决的问题”取决于您的用例。
归档时间: |
|
查看次数: |
7677 次 |
最近记录: |