簡體   English   中英

如何輸入 function 作為類型保護?

[英]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);

TypeScript 游樂場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM