【发布时间】:2018-07-03 04:21:55
【问题描述】:
在下面的代码中,我尝试创建一个类型安全的函数来访问给定输入的data 属性。我的目标是避免在任何地方重复访问data,为此我希望将样板代码保持在最低限度(例如,我希望 TypeScript 推断出尽可能多的类型)。
interface User {
name: string
}
interface HttpResponse<T> {
data: T
status: number
}
type HttpPromise<T> = Promise<HttpResponse<T>>
function fetch<T>(url: string): HttpPromise<T> {
return
}
function getData<T>(response: HttpResponse<T>): T {
return response.data
}
// Doesn't work: 'Promise<{}>' is not assignable to type 'Promise<User>'.
function fetchUser(): Promise<User> {
return fetch('https://...').then(getData)
}
我知道如何通过明确声明更多类型来使其工作,但我不知道为什么这还不起作用。特别是:
-
{}类型从何而来(在Promise<{}>中)? - 为什么 TypeScript 不能根据返回类型正确推断表达式的类型?
【问题讨论】: