我有一個箭頭函式:
const getCsrfToken = async () => {
const csrfTokenResponse = await axios.get<any, AxiosResponse<CSRFToken>>(csrfUrl);
if (csrfTokenResponse?.data) {
return csrfTokenResponse.data;
}
return Error('Failed to fetch CSRF token.');
};
TypeScript 給出了這個警告:
TS2339: Property 'data' does not exist on type 'Error | CSRFToken'.
Property 'data' does not exist on type 'Error'.
如果 axios 回傳一個回應,它將是 type CSRFToken,它肯定有一個data屬性。
所以,我認為使用?incsrfTokenResponse?.data就足以保證 axios 回傳CSRFToken而不是Error,但是 TypeScript 仍然給我這個訊息。
如何修復 TypeScript 警告?
打字稿 4.4
uj5u.com熱心網友回復:
您可以通過多種方式修復此錯誤。
鑄件
如果確定回傳值已定義,則可以轉換回傳值。
(csrfTokenResponse as CSRFToken).data
訪問前鍵入檢查
您可以使用以下實用程式型別來斷言回傳值是否為錯誤
const isError = (err: unknown): err is Error => err instanceof Error;
拋出錯誤而不是回傳它。
您可以通過使用throw Error而不是回傳來保持一致的回傳型別。
更好的回傳格式
以下回傳格式的靈感來自go如何處理回傳值。
const getCsrfToken = async () => {
const csrfTokenResponse = await axios.get<any, AxiosResponse<CSRFToken>>(csrfUrl);
if (csrfTokenResponse?.data) {
return [data, null] as const;
}
return [null, Error('Failed to fetch CSRF token.')] ;
};
并像這樣使用它
const [data, error] = await csrfTokenResponse()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/317147.html
標籤:打字稿
下一篇:打字稿-強制值成為介面的屬性
