我正在嘗試為 TypeScript 中的異步測驗創建一個模擬函式。我的函式接收一些資料,并在 promise 解決時回傳它。
我知道我可以這樣輸入:
type Options<T> = {
data: T;
};
export const mockApiCall = async <T>({ data }: Options<T>): Promise<{ data: T }> => {
return new Promise((resolve) => {
setTimeout(() => resolve({ data }), 100);
});
};
但我想在函式名中使用型別別名,如下所示:
type Options<T> = {
data: T;
};
type MockData<T> = (options: Options<T>) => Promise<{ data: T }>;
export const mockApiCall: MockData<T> = async ({ data }) => {
return new Promise((resolve) => {
setTimeout(() => resolve({ data }), 100);
});
};
但它回傳錯誤Cannot find name 'T'.ts(2304)。
什么是正確的語法?
uj5u.com熱心網友回復:
您的泛型型別引數的位置是錯誤的。您想要一個泛型函式(函式上的型別引數)而不是恰好是函式的泛型型別。不同之處在于泛型函式的型別引數在呼叫時決定。泛型型別需要在使用時確定其型別引數。
type Options<T> = {
data: T;
};
type MockData = <T>(options: Options<T>) => Promise<{ data: T }>;
export const mockApiCall: MockData = async ({ data }) => {
return new Promise((resolve) => {
setTimeout(() => resolve({ data }), 100);
});
};
游樂場鏈接
uj5u.com熱心網友回復:
你可以試試這段代碼:
type Options<T> = {
data: T;
};
export const mockApiCall = async <T>({ data }: Options<T>) => {
return new Promise<Options<T>>((resolve) => {
setTimeout(() => resolve({ data }), 100);
});
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/412131.html
標籤:
上一篇:將泛型結構視為特征物件
