הסקת סוגים - למה קומפיילר של TypeScript לא מסיק את סוג השומר של הפילטר הזה?
אני מנסה לסנן ערכים בלתי מוגדרים ממערך, אבל לא מצליח לגרום למתרגם להבין את סוג התוצאה בצורה נכונה. אני יודע שאני יכול פשוט להשתמש באישור סוגים, אבל הייתי מעדיף להבין איך להקליד נכון את הפונקציה ההפוכה שלי כדי להשיג את התוצאה הזו.
const isDefinedNum = (x: number | undefined, _i: number, _a: ReadonlyArray<number | undefined>): x is number => x !== undefined;
const a: (number | undefined)[] = [1, undefined, 2, undefined];
const b = a.filter(isDefinedNum);
במה שלמעלה, b הוא מסוג (number | undefined)[]. אני מנסה לגרום למתרגם לאחד את הקריאה עם הסוג הבא מתוך lib.d.ts:
filter<S extends T>(callbackfn: (this: void, value: T, index: number, array: ReadonlyArray<T>) => value is S): S[];