Object.entries() и Object.values ​​() не печатаются как массивы в WebStorm/PhpStorm

У меня есть проект TypeScript с целью ES6, он использует core-js Полифилл ES2017 функции и tsconfig.json настроен соответственно.

когда Object.entries(...) а также Object.values(...) результаты не имеют методов и свойств массива (map, forEach, length и т. д.), они отображаются в IDE как простые объекты, поэтому any[] Тип должен быть приведен явно:

В то время как Object.keys(...) ведет себя как следует.

В то же время IDE как-то "знает" о правильных типах для Object.entries а также Object.values они отображаются в соответствии с TypeScript lib.es2017.object.d.ts по Ctrl+Shift+P. Но, кажется, игнорировать типы для проверки, потому что переопределение 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).

1 ответ

В Typescript 2.3 появилась новая поддержка итераторов, стоящих за --downlevel-iteration флаг компилятора или путем установки .compilerOptions.downlevelIteration в true в вашем tsconfig.json,

Обратите внимание, что этот ответ такой же, как и тот, который относится к одному и тому же флагу компилятора и аналогичным признакам, хотя один относится к проблемам с компилятором, а этот относится к некоторой интеграции IDE.

Перейдите в свой tsconfig.json и измените цель, библиотеку и модуль на es2017.

Другие вопросы по тегам