我在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引发错误,请参考他的答案以了解更多细节!

希望这能有所帮助;)

Typescript相关问答推荐

根据第一个参数的值设置第二个参数的类型

如何从TypScript中的接口中正确获取特定键类型的所有属性?

SortKey类型不起作用,尽管它使用的单个类型工作正常<>'

TS2339:类型{}上不存在属性消息

如何使我的函数专门针对联合标记?

是否可以从函数类型中创建简化的类型,go 掉参数中任何看起来像回调的内容,而保留其余的内容?

嵌套对象的类型

寻址对象中路径的泛型类型

笛卡尔产品类型

编译TypeScrip项目的一部分导致错误

如何获取受类型脚本泛型约束的有效输入参数

将带有样式的Reaction组件导入到Pages文件夹时不起作用

Typescript 中相同类型的不同结果

如何避免从引用<;字符串&>到引用<;字符串|未定义&>;的不安全赋值?

错误TS7030:并非所有代码路径都返回值.";由tsfig.json中的";Strong";:False引起

如何创建由一个帐户签名但使用另一个帐户支付的Hedera交易

如何调整项目数组,但允许权重影响顺序

Typescript:是否将联合类型传递给重载函数?

Typescript 从泛型推断类型

Typescript 子类继承的方法允许参数中未定义的键