在WebStorm/PhpStorm中,Object.entries()和Object.values()未在数组中键入

Est*_*ask 5 jetbrains-ide phpstorm webstorm typescript ecmascript-2017

我有带ES6目标的TypeScript项目,它用于core-js填充ES2017功能,并相应地配置tsconfig.json.

Object.entries(...)Object.values(...)使用时,结果不具有阵列的方法和属性(map,forEach,length等),它们显示为纯对象IDE,所以any[]类型应明确浇铸:

虽然Object.keys(...)表现得像它应该.

同时,IDE以某种方式'知道'正确的类型,Object.entriesObject.values按照lib.es2017.object.d.tsCtrl + Shift + P上的TypeScript显示它们.但它似乎忽略了检查的类型,因为覆盖ObjectConstructor当前文件解决了问题:

interface ObjectConstructor {
    values(o: any): any[];
    entries(o: any): [string, any][];
}
Run Code Online (Sandbox Code Playgroud)

tsc 对于打字来说似乎很好,所以它看起来像IDE特定的问题.

只有Use TypeScript serviceLanguages & Frameworks > TypeScript未选中时才会发生这种情况.启用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"
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我的设置在某处出错吗?

TypeScript 2.1.5和最新的IDE(EAP 2017.1)仍然存在问题.

svv*_*vac 2

Typescript 2.3 引入了对编译器标志后面的迭代器的新支持--downlevel-iteration,或者.compilerOptions.downlevelIteration通过truetsconfig.json.

请注意,这个答案与那个答案相同,因为它指的是相同的编译器标志和类似的症状,尽管一个答案指的是编译器的问题,而这个答案是关于某些 IDE 集成的。