我有一些這樣的短代碼:
import { AsyncThunk, createAsyncThunk } from '@reduxjs/toolkit';
export type ThunkCallback = (...any) => Promise<string>;
export default function getCanvasThumbnail(
callback: ThunkCallback,
): AsyncThunk<any, any, any> {
return createAsyncThunk('panel/get-canvas-thumbnail', callback);
}
做<any, any, any>讓我通過 TS,直到我做addCase它不知道 thunk 具有.fulfilled或.rejected屬性的地方。
該檔案這樣說:
此外,由于 TS 不能混合顯式和推斷的泛型引數,因此從此時起,您還必須定義 Returned 和 ThunkArg 泛型引數。
如果它們是賦予rejectedandfulfilled屬性的東西,我不確定它們是如何通用的。
不確定該怎么做,因為如果沒有我重新撰寫界面的副本,這些東西似乎不會被匯出。我希望我錯過了什么!
uj5u.com熱心網友回復:
您只是使用了太多注釋。
拿這兩個代碼片段:
const x: number = 5
if (x == 4) { console.log("impossible") }
和
const x = 5
// this will warn
if (x == 4) { console.log("impossible") }
在第一種情況下,什么都沒有發生。在第二種情況下,TS 告訴你xis5并且永遠不可能4。
有用的資訊。為什么我們在第一種情況下沒有收到警告?
通過手動指定變數的型別,您實際上洗掉了以前可用的有價值資訊。
這里同樣適用。如果去掉回傳型別的注釋,則回傳型別1:1是回傳型別createAsyncThunk,并遠超過任何你能用手注釋更準確。
尤其是在 Redux Toolkit 中,這些型別并不意味著要手寫,因為它們有時會填滿你的整個螢屏。我可以自信地說,我是實作和設計大多數這些型別的人。您將獲得驚人的自動完成功能,但您確實不必手動注釋這些變數。
export default function getCanvasThumbnail(
callback: ThunkCallback,
) /* without a return type annotation, this is typed perfectly */ {
return createAsyncThunk('panel/get-canvas-thumbnail', callback);
}
因此,除非您有充分的理由,否則請忽略那些不必要的注釋。通常,型別注釋僅在函式輸入位置真正需要,因為它們無法在那里推斷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/407769.html
標籤:
