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

时间:2017-02-01 15:45:48

标签: typescript phpstorm webstorm jetbrains-ide ecmascript-2017

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

使用Object.entries(...)Object.values(...)时,结果不具备数组方法和属性(mapforEachlength等),它们作为IDE的普通对象出现,因此any[]类型应该明确地转换为:

虽然Object.keys(...)的行为应该如此。

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

interface ObjectConstructor {
    values(o: any): any[];
    entries(o: any): [string, any][];
}

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

只有在取消选中Use TypeScript service中的Languages & 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"
  ]
}

这是什么意思?我的设置在某个地方出错了吗?

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

2 个答案:

答案 0 :(得分:2)

select * from employeemaster where employeename in ('Sachin','Gaurav','Vinay','Shiv','Sandeep','Vaibhav','Prashant') 编译器标记后面的

Typescript 2.3 introduced new support for iterators,或者--downlevel-iteration.compilerOptions.downlevelIteration设置为true

请注意,此答案与that one相同,因为它引用相同的编译器标志和类似的症状,即使有人提到编译器的问题,而这个问题与某些IDE集成有关。

答案 1 :(得分:-1)

转到您的tsconfig.json并将目标,库和模块更改为es2017。