У меня есть проект 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).