gpt4 book ai didi

typescript - 为什么访问 indexOf 的属性仍然可以编译?

转载 作者:搜寻专家 更新时间:2023-10-30 20:29:53 27 4
gpt4 key购买 nike

我在 TypeScript 中犯了一个拼写错误,在代码审查期间发现了这个错误。

我使用了 someArray.indexOf[someObject] 而不是 someArray.indexOf(someObject)

我预计 IDE/编译器会出现错误。相反,没有出现任何错误,结果只是未定义。

谁能解释一下?

最佳答案

很简单。

someArray.indexOf 你知道这是一个函数,也是一个对象,可以有属性。

通过执行 someArray.indexOf[someObject],您将尝试使用值为 someObject 的值访问该属性。

当然在indexOf函数上没有定义,所以返回undefined

说明函数可以具有属性的语法和事实的快速示例;):

const array = [];
array.indexOf['anyValue'] = 'test';
console.log(array.indexOf.anyValue);

编辑

这是对问题的 TypeScript 方面的回答尝试。

如您所知,TypeScript 旨在与 JavaScript 兼容。因此,与在JS中一样,可以通过以下方式访问对象的属性:

  • '静态':obj.property
  • '动态':obj['property']

当然,通过使用“静态”方式访问属性,TypeScript 会引发错误!

但是使用动态访问属性的方式,TypeScript 编译器无法确定它的类型或它是否存在,因为括号之间的值将在运行时在 TypeScript 转译后计算。

这就是为什么它会被隐式标记为any

正如 David Sherret 在他的 answer 中提到的那样,您可以通过添加标志 --noImplicitAny 强制 TypeScript 引发错误,有关此的更多详细信息,请参阅他的回答!

希望这有帮助;)

关于typescript - 为什么访问 indexOf 的属性仍然可以编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54254396/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com