Object.entries() 和 Object.values() 在 WebStorm/PhpStorm 中没有被键入为数组
Posted
技术标签:
【中文标题】Object.entries() 和 Object.values() 在 WebStorm/PhpStorm 中没有被键入为数组【英文标题】:Object.entries() and Object.values() are not typed as arrays in WebStorm/PhpStorm 【发布时间】:2017-06-18 10:38:48 【问题描述】:我有一个带有 ES6 目标的 TypeScript 项目,它使用 core-js
来填充 ES2017 特性,并相应地配置了 tsconfig.json。
当使用Object.entries(...)
和Object.values(...)
时,结果没有数组方法和属性(map
、forEach
、length
等),它们在 IDE 中显示为普通对象,所以@ 987654329@ 类型应显式转换:
虽然Object.keys(...)
的行为应该如此。
同时 IDE 以某种方式“知道”Object.entries
和 Object.values
的正确类型,它们在 Ctrl+Shift+P 上按照 TypeScript 的 lib.es2017.object.d.ts
显示。但它似乎忽略了检查的类型,因为在当前文件中覆盖 ObjectConstructor
可以解决问题:
interface ObjectConstructor
values(o: any): any[];
entries(o: any): [string, any][];
tsc
的打字似乎没问题,所以看起来像是 IDE 特有的问题。
只有在 Languages & Frameworks > TypeScript
中的 Use TypeScript service
未选中时才会出现这种情况。 启用 TypeScript 服务后一切正常(故意禁用,因为之前 TS 服务出现问题)。
这里是 tsconfig.json:
"compilerOptions":
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"alwaysStrict": true,
"strictNullChecks": false,
"baseUrl": "./src",
"paths": [],
"lib": [
"es2016",
"es2017.object"
]
,
"exclude": [
"node_modules"
]
这是什么意思?我的设置是不是哪里出错了?
TypeScript 2.1.5 和最新的 IDE (EAP 2017.1) 仍然存在问题。
【问题讨论】:
肯定会更新到最新的 TypeScript。您使用的版本超过 1 年 嗯,这个问题也有一年了。这个问题在某个时候对我来说消失了,但我从来不知道这是由于 TS 还是 IDE 更新造成的。 太棒了,这会教我不要正确阅读。我很高兴你的问题得到了解决,我希望有一天你能找到问题的答案。在那之前,我们都在黑暗中 【参考方案1】:转到您的 tsconfig.json 并将目标、库和模块更改为 es2017。
【讨论】:
【参考方案2】:Typescript 2.3 introduced new support for iterators 在 --downlevel-iteration
编译器标志后面,或者通过在 tsconfig.json
中将 .compilerOptions.downlevelIteration
设置为 true
。
请注意,此答案与 that one 相同,因为它指的是相同的编译器标志和类似的症状,即使一个指的是编译器的问题,而这个是关于一些 IDE 集成。
【讨论】:
以上是关于Object.entries() 和 Object.values() 在 WebStorm/PhpStorm 中没有被键入为数组的主要内容,如果未能解决你的问题,请参考以下文章
Object.entries() 和 Object.values() 在 WebStorm/PhpStorm 中没有被键入为数组
Object.keys(),Object.values(),Object.entries()