I made a typo in TypeScript which was picked up during code review.
I used someArray.indexOf[someObject]
instead of someArray.indexOf(someObject)
.
I would expect an error from the IDE/Compiler. Instead, no errors were raised and the result was simply undefined.
Can anyone explain this?
Quite easy.
someArray.indexOf
you know that this is afunction
, which is also an object and can have properties.By doing
someArray.indexOf[someObject]
, you are trying to reach the property with the key valued to the value ofsomeObject
.Of course, it is not defined on the
indexOf
function, so it returnsundefined
.Quick example that illustrates the syntax and the fact that a function can have properties ;) :
EDIT
Here is an attempt of an answer for the TypeScript side of the question.
As you already know, TypeScript is designed to be compatible with JavaScript. Therefore, as in JS, you can access a property of an object by the following ways:
obj.property
obj['property']
By using the 'static' way to access a property, of course, TypeScript will raise an error!
But with the dynamic way of accessing the property, there is no way TypeScript compiler can determine the type of it or if it exists or not, since the value between bracket will be evaluated at runtime, after TypeScript transpiling.
That's why it will be implicitly marked as
any
.As David Sherret mentioned in his answer, you can force TypeScript to raise an error by adding the flag
--noImplicitAny
, please refer to his answer for more details about this!Hoping this helps ;)