Довольно просто.
someArray.indexOf
вы знаете, что это function
, который также является объектом и может иметь свойства.
Делая someArray.indexOf[someObject]
, вы пытаетесь достичь свойства с ключом, оцененным в значение someObject
.
Конечно, он не определен в функции indexOf
, поэтому возвращает undefined
.
Быстрый пример, иллюстрирующий синтаксис и тот факт, что функция может иметь свойства;):
const array = [];
array.indexOf['anyValue'] = 'test';
console.log(array.indexOf.anyValue);
EDIT
Вот попытка ответа на вопрос, связанный с TypeScript.
Как вы уже знаете, TypeScript разработан для совместимости с JavaScript. Следовательно, как и в JS, вы можете получить доступ к свойству объекта следующими способами:
- «Статически»:
obj.property
- «Динамически»:
obj['property']
Используя статический способ доступа к свойству, конечно, TypeScript вызовет ошибку!
Но при динамическом способе доступа к свойству компилятор TypeScript не сможет определить его тип или, если он существует, или нет, так как значение в скобках будет оцениваться во время выполнения после переноса TypeScript.
Вот почему он будет неявно помечен как any
.
Как отметил Дэвид Шеррет в своем ответе , вы можете заставить TypeScript выдавать ошибку, добавив флаг --noImplicitAny
, пожалуйста, обратитесь к его ответу для получения более подробной информации об этом!
Надеюсь, это поможет;)