我試圖讓getResults
函式回傳正確的型別,但目前堅持這一點:
interface IResponse<T> {
result: T;
}
type FnType<P, R> = (params: P) => R;
const r1: IResponse<string[]> = { result: ['123'] };
const r2: IResponse<number[]> = { result: [456] };
const getResults = <T, R extends IResponse<T[]>, P>(fn: FnType<P, R>, params: P): T[] => {
return [
...fn(params).result,
...fn(params).result
];
};
const getValue = <T>(r: IResponse<T>) => r;
// returned type is unknown[]
// how can we make it return string[]?
getResults(getValue, r1);
// returned type is unknown[]
// how can we make it return number[]?
getResults(getValue, r2);
操場
該代碼只是一個示例,在生產getResults
函式中用于合并來自分頁請求的結果(fn
在本例中是請求函式)
uj5u.com熱心網友回復:
所以,我不確定這是否也涵蓋了您生產所需的東西。但是回傳型別看起來不錯,如下所示:
interface IResponse<T> {
result: T;
}
type FnType<P, R> = (params: P) => R;
const r1: IResponse<string[]> = { result: ['123'] };
const r2: IResponse<number[]> = { result: [456] };
const myResults = <P,R>(fn: FnType<P,IResponse<R[]>>, params: P): R[] => {
return [
...fn(params).result,
...fn(params).result
];
}
const getValue = <T>(r: IResponse<T>) => r;
myResults(getValue, r1);
myResults(getValue, r2);
游樂場鏈接
編輯:我實際上并不確定為什么有問題的代碼沒有給出正確的 IntelliSense,這對我來說很有意義。
但我可以看到您使用了三種泛型型別T
,R
并且P
. 我的想法是,基本上你只需要擔心兩種型別,即引數和方法的結果。
我基本上說,getValue
's中的任何型別都將是函式IResponse
的最終輸出。myResults
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470416.html
上一篇:使用型別作為通用方法引數
下一篇:保留泛型變數之間的型別限制