TypeScript中的ES7 Object.entries()无效

时间:2016-09-28 08:00:31

标签: typescript

我遇到使用TypeScript转换ES7代码的问题。这段代码:

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

TypeScript 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" ],但仍然,typescript不允许我将其转换。

5 个答案:

答案 0 :(得分:15)

当我有一个全局编译器而不是./node_modules中的本地编译器时,我可以重现你的问题。

在我的情况下,编译器只是不知道要使用哪个tsconfig.json文件。将它指向特定的tsconfig.json文件有助于:

tsc --project ./tsconfig.json

我还在lib中添加了dom选项,因为es2017无法识别控制台:

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

答案 1 :(得分:6)

嗯,看起来我忘了将core-js polyfill注入Object.entries。 import 'core-js/fn/object/entries';这个polyfill转换工作正常,但IDE仍在抱怨它。当我直接包含@types/core-js时,IDE就可以,但由于“lib / es2017”中的重复声明,Typescript会崩溃。看起来IDE(WebStorm)无法处理tsconfig.json内的“lib”设置/ p>

修改 是的,我试图修改WebStorm设置,并在将“使用TypeScript服务(实验)”设置为true后,一切正常!

答案 2 :(得分:3)

如果您不想在一组库中包含完整的 ECMAScript 2017(ES8),那么您也可以使用es2017.object来满足{ {1}}和相关。

这是一个最小的工作示例:

src / index.ts

Object.entries

tsconfig.json

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

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

注意::如果{ "compilerOptions": { "lib": ["dom", "es2016", "es2017.object"], "rootDir": "src", "target": "es6", "outDir": "dist" }, "exclude": [ "node_modules" ] } 设置为"target",则TypeScript默认使用以下"es6"条目(如果未指定):{{1 }}。

手动设置"lib"时,库的默认设置会被覆盖,这就是为什么我需要添加["dom", "dom.iterable", "es6", "scripthost"](在代码中使用"lib")和"dom"来演示用法ES6和部分ES8(console.log)。

来源:TypeScript Compiler Options

答案 3 :(得分:2)

对于独立的Typescript应用程序,我必须将lib es2019.object添加到tsconfig中,并导入polyfill使其起作用:)

import 'core-js/es/object/from-entries';

答案 4 :(得分:1)

这对我有用;当然,您可以在此处更改任何适合您的界面/类型...

library(tidyverse)

bind_cols(df, map_dfc(as.character(0:5), ~df %>% 
          transmute(!!paste0('source', .x) := str_detect(knowledge_type, .x))))

#  knowledge_type source0 source1 source2 source3 source4 source5
#1           0145    TRUE    TRUE   FALSE   FALSE    TRUE    TRUE
#2           0123    TRUE    TRUE    TRUE    TRUE   FALSE   FALSE
#3         012345    TRUE    TRUE    TRUE    TRUE    TRUE    TRUE
#4            234   FALSE   FALSE    TRUE    TRUE    TRUE   FALSE