איך TypeScript מתאים לשיטה הזו


test.js
const testList = [1, 2, 2, 4, 5, 2, 4, 2, 4, 5, 5, 6, 7, 7, 8, 8, 8, 1, 4, 1, 1];
const lastIndex = testList.findLastIndex((e:number) => e === 100);
// Property 'findLastIndex' does not exist on type 'number[]'. Did you mean 'findIndex'?ts(2551)
// lib.es2015.core.d.ts(43, 5): 'findIndex' is declared here.
tsconfig.json
...
"target": "ES6",           
...

האם מתודת findLastIndex דורשת הגדרות כלשהן של ts?

תשובה #1

שיטת המערך findLast() ושיטת המערך findLastIndex() הן כיום, נכון ל-15-01-2023, חלק מהצעה שהגיעה לשלב 4 בתהליך TC39. לכן הן אינן כרגע כלולות באף גרסה משוחררת של ECMAScript, אך הן כלולות בגרסת ESNext ולפיכך יופיעו ב-ES2023.

ל-TypeScript, נפתח microsoft/TypeScript#48829 כדי לתמוך בתוספות אלה. הן יומשו ב-microsoft/TypeScript#49636 שנמזג זה עתה לענף הראשי של TS ב-13 בינואר 2023 (לפני יומיים). לכן אף גרסה שפורסמה כרגע של TypeScript אינה תומכת בהן, אך הן נמצאות בגרסת הלילה typescript@next ויופצו עם TypeScript 5.0.

אז, לעת עתה, אם אתם רוצים לגשת לשיטות אלו בלי להוסיף הצהרות משלכם עבורן, אתם צריכים להשתמש בגרסת הלילה של TypeScript עם --target שלכם מוגדר ל-"ESNext" (או אולי "ES2023" אם האפשרות זמינה).

קישור ל-Playground לקוד, TS5.0-dev עם יעד ESNext

תשובה #2

let lastIndex = -1;
for (let i = testList.length - 1; i >= 0; i--) {
    if (testList[i] === 100) {
        lastIndex = i;
        break;
    }
}
console.log(lastIndex); // -1 if 100 is not in the list, otherwise the last index of 100