2016-09-28 4 views
3

У меня проблема с транслированием кода ES7 с помощью TypeScript. Этот код:ES7 Object.entries() в TypeScript не работает

const sizeByColor = { 
    red: 100, 
    green: 500, 
}; 

for (const [ color, size ] of Object.entries(sizeByColor)) { 
    console.log(color); 
    console.log(size); 
} 

выдает ошибку:

TypeError: Object.entries is not a function

машинопись v2.0.3

tsconfig.json:

{ 
"compilerOptions": { 
    "module": "commonjs", 
    "target": "es6", 
    "noImplicitAny": true, 
    "noEmitOnError": true, 
    "outDir": "dist", 
    "allowSyntheticDefaultImports": true, 
    "experimentalDecorators": true, 
    "pretty": true, 
    "lib": [ "es2017" ], 
}, 
"exclude": [ 
    "node_modules" 
], 
"include": [ 
    "./node_modules/@types/**/*.d.ts", 
    "./src/**/*.ts" 
] 
} 

Я хочу итерацию объекта корыта с Object.entries(), поэтому я назначил внутренние определения "lib": [ "es2017" ], но, тем не менее, машинописный шрифт не позволит мне перекрыть его.

+0

Добро пожаловать в SO :) Представьте свой вопрос ... вопрос или запись в вашу проблему, подробно о том, что вы используете. Добавьте примеры того, что вы сделали, что сработало, а что нет. Спасибо – Benj

+0

Привет, лучше? :-) –

+0

Да :) Извините за то, что я немного педантичен, но не волнуйтесь, у меня тоже было много кусков, когда я сюда приехал;) Не забывайте поднимать все то, что релевантно/помогло вам и пометить как принятое когда ответ соответствует вашим потребностям. Благодаря ! – Benj

ответ

4

Хм, это выглядит я забыл вводят core-js polyfill в Object.entries. import 'core-js/fn/object/entries'; С этой полифильной транспиляции работает, но IDE все еще жалуется на это. Когда я включаю @types/core-js непосредственно, IDE нормально, но Машинопись потерпит крах из-за дублирования деклараций в «Lib/es2017» .. Похоже, IDE (WebStorm) косяка ручки «Lib» настройки внутри tsconfig.json

EDIT: Yey, я попытался изменить настройки WebStorm и после того, как установил «Use TypeScript service (experimental)» в true, все в порядке!

+0

хорошо помогите мне с дальнейшим объяснением. Где вы импортируете 'core-js/fn/object/entries'? – Winnemucca

5

Я могу воспроизвести вашу проблему, когда у меня есть глобальный компилятор, но не локальный в ./node_modules.

В моем случае компилятор просто не знает, какой файл tsconfig.json использовать. Указав его конкретный файл tsconfig.json помогает:

tsc --project ./tsconfig.json

Я также добавил Dóm возможности Либерала, потому что es2017 не признает консоль:

"lib": [ 
    "es2017", 
    "dom" 
] 
+0

Я уже использую '-p .' для выбора проекта –

+0

Мне пришлось добавить' 'es2017' 'в качестве пресета в' .babelrc', а также вариант lib в этом ответе –

Смежные вопросы