我在TypeScript中输入了一个错误,这是在代码判断时发现的.
我用了someArray.indexOf[someObject]
而不是someArray.indexOf(someObject)
.
我预计IDE/编译器会出错.相反,没有出现错误,结果也没有定义.
有人能解释一下吗?
我在TypeScript中输入了一个错误,这是在代码判断时发现的.
我用了someArray.indexOf[someObject]
而不是someArray.indexOf(someObject)
.
我预计IDE/编译器会出错.相反,没有出现错误,结果也没有定义.
有人能解释一下吗?
很简单.
someArray.indexOf
你知道这是一个function
,它也是一个对象,可以有属性.
通过执行someArray.indexOf[someObject]
,您试图访问键值为someObject
的属性.
当然,它不是在indexOf
函数上定义的,所以它返回undefined
.
举例说明函数可以有属性的语法和事实;):
const array = [];
array.indexOf['anyValue'] = 'test';
console.log(array.indexOf.anyValue);
EDIT
下面是对问题打字部分的一个try 性回答.
正如您已经知道的,TypeScript是为了与JavaScript兼容而设计的.因此,与在JS中一样,您可以通过以下方式访问对象的属性:
obj.property
obj['property']
当然,通过使用"静态"方式访问属性,TypeScript将引发错误!
但使用动态访问属性的方式,TypeScript编译器无法确定它的类型,或者它是否存在,因为括号之间的值将在运行时,在TypeScript传输之后进行计算.
这就是为什么它会被隐式标记为any
.
正如David Sherret在他的answer篇文章中提到的,你可以通过添加标志--noImplicitAny
来强制TypeScript引发错误,请参考他的答案以了解更多细节!
希望这能有所帮助;)