С Новым годом :)Тип машинописного типа на уровне обещаний
У меня возникли трудности с пониманием проблемы с машинописными текстами.
я пытаюсь преобразовать мой JS проект в т.с. один, так как лучшее исполнение типа и легче ошибки отлова
Теперь у меня есть тип:
export interface APIErrorInfo {
code: number,
msg: string,
status: number
}
И я звоню выборки , который возвращает обещание как обычно
get(path: string) {
this.signApiCall(path, "GET", null)
return fetch("http://" + this.apiHost + path,
{
method: "GET",
headers: this.headers
}
).then(
json => {
return this.errorHandle(json)
}
)
}
здесь я понимаю, что это JSON «любой» типа, так что в моем errorHandle меня
errorHandle(jsonPromise: any): Promise<APIErrorInfo> {
let json = jsonPromise.json()
if(jsonPromise.status >= 400) {
return json.then(err => {throw qiniuErrorHandle(jsonPromise.status)})
} else {
return json
}
}
const qiniuErrorHandle = (code): APIErrorInfo => {
switch(true) {
case code === 111:
return {msg: "blah1", code: APICode.StreamExists, status: HTTPStatus.BadRequest}
case code === 222:
return {msg: "blah2", code: APICode.StreamDoNotExist, status: HTTPStatus.BadRequest}
case code === 333:
return {msg: "blah3", code: APICode.StreamHasNoData, status: HTTPStatus.BadRequest}
default:
return {msg: "Unknown error", code: APICode.UnknownError, status: HTTPStatus.InternalError}
}
}
Это все хорошо, кроме типа возврата здесь. Я прошу errorHandle вернуть только обещание (которое, как я знаю, должно быть не так?), Но предложение if else может вернуть «json», который является любым. Таким образом, возможно, что ошибкаHandle возвращает законный json, но tsc-компилятор считает, что это нормально для компиляции и запуска. Хуже того, я даже не получил ошибку времени выполнения, в то время как json возвращается
Я что-то упустил?
Второй вопрос: какой лучший способ справиться с «APIError» и «legal APIResponse» в этом случае? Какие-либо предложения?