Typescript - Как проверить, существует ли индекс массива?

Я пытаюсь проверить, существует ли индекс массива в TypeScript следующим образом (Только пример):

var someArray = [];

// Fill the array with data

if ("index" in someArray) {
   // Do something
}

Однако я получаю следующую ошибку компиляции:

Оператор in требует, чтобы левый операнд имел тип Any или Строковый примитивный тип и правый операнд типа Any или тип объекта

Кто-нибудь знает, почему? насколько я знаю, то, что я пытаюсь сделать, полностью легально JS.

Спасибо.

Ответы

Ответ 1

Как указано в комментариях, вы смешиваете массивы и объекты. Доступ к массиву можно получить с помощью числовых индексов, в то время как к объекту можно получить доступ к строковым ключам. Пример:

var someObject = {"someKey":"Some value in object"};

if ("someKey" in someObject) {
    //do stuff with someObject["someKey"]
}

var someArray = ["Some entry in array"];

if (someArray.indexOf("Some entry in array") > -1) {
    //do stuff with array
}

Ответ 2

jsFiddle Demo

Используйте hasOwnProperty следующим образом:

var a = [];
if( a.hasOwnProperty("index") ){
 /* do something */  
}

Ответ 3

Вы также можете использовать метод findindex:

var someArray = [];

if( someArray.findIndex(x => x === "index") >= 0) {
    // foud someArray element equals to "index"
}