我遇到使用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不允许我将其转换。
答案 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
)。
答案 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