[英]How to type an input function as a type guard?
我如何概括 function 將 T1 數組映射到僅包含 T2 的數組,其中 T2 是 T1 的子類型?
function filterJustStrings(arr: (string| number)[]) {
return arr.filter((i) => typeof i === 'string') as string[];
}
給定謂詞函數,定義為類型保護
function isNumber(i: any) : i is number {
return typeof i === 'number';
}
function isString(i: any) : i is string{
return typeof i === 'string';
}
我想改進這個 function 的打字:
function filterJustT<TWide extends T, T>(predicate: (i: TWide) => boolean): (arr: TWide[]) => T[] {
return (arr: TWide[]) => arr.filter((i) => predicate(i)) as T[];
}
以便使用保護類型推斷返回類型
const filterJustStrings2 = filterJustT(isString);
const filterJustStrings3 = filterJustT(isNumber);
上面的代碼根據謂詞的輸入正確推斷出期望的輸入,但是返回類型是unknown[]
有沒有辦法提取守衛類型縮小?
嘗試這個
function filterJustT<T>(predicate: (i: any) => boolean): (arr: any[]) => T[] {
return (arr: any[]) => arr.filter((i) => predicate(i)) as T[];
}
const filterJustStrings2 = filterJustT<string>(test);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.