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.