5

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

使用Object.entries(...)Object.values(...)时,结果没有数组方法和属性(mapforEachlength等),它们在 IDE 中显示为普通对象,因此any[]应显式转换类型:

虽然Object.keys(...)表现得像它应该的那样。

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

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

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

仅当未选中Use TypeScript servicein时才会发生这种情况。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) 仍然存在此问题。

4

2 回答 2

2

--downlevel-iterationTypescript 2.3 在编译器标志后面引入了对迭代器的新支持.compilerOptions.downlevelIteration,或者通过在true你的tsconfig.json.

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

于 2018-02-02T14:55:39.947 回答
-1

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

于 2019-09-20T09:09:03.440 回答