【发布时间】:2020-02-19 00:01:48
【问题描述】:
我有一个使用来自外部 API 的数据的方法:
public async getStatus(id: string): Promise<APIRes | undefined> {
try {
const result = await getRequest(`${this.URL}/endpoint/${id}`)
const response: APIRes = result.data
return response
} catch (err) {
errorHandler(err)
}
}
APIRes 的界面如下:
export interface APIRes{
version: string,
status: string,
uuid: string,
time: string
}
问题是当我尝试从另一个方法调用 getStatus 时:
public async getListOfResults(id: string) {
try {
const getStatus = await this.getStatus(id)
if (getStatus.status === 'Queue' || getStatus.status === 'Progr') {
...//MORE CODE
}
const result = await getRequest(`${this.URL}/endpoint/${id}/result`)
return result.data
} catch (err) {
errorHandler(err)
}
}
我在 getStatus.status 上收到 Object is possibly undefined。现在我明白为什么会发生这种情况(因为 getStatus 方法可能返回未定义),但不确定如何在不添加 nostrict 标志的情况下最好地修复。
如果我在getStatus 的返回类型中删除<| undefined>,我会得到
Function lacks ending return statement and return type does not include 'undefined'.ts(2366)`
如果我尝试将其从 undefined 更改为 void,我仍然会在 getStatus.status 上收到错误
【问题讨论】:
-
如果
await this.getStatus(id)产生undefined,你想在运行时发生什么? -
我希望这会产生错误
-
那么在
const getStatus = ...之后和if (getStatus.status ...之前写if (!getStatus) throw new Error("THE WORLD HAS ENDED");什么的,这样编译器就知道getStatus肯定会被定义。 -
您是说它返回 APIRes 类型的承诺或未定义的承诺?
Promise<APIRes | undefined>我想你的意思是它要么返回一个 APIRes 类型的 Promise,要么只返回 undefined,对吧? -
您应该考虑将此处的代码设置为真正的minimal reproducible example,可以将其放入任何IDE,其中唯一的错误就是您要询问的错误。然后有人可以通过确保示例代码按预期工作来知道他们已经回答了这个问题。祝你好运!
标签: javascript typescript ecmascript-6 types