我有使用TypeScript转换ES7代码的问题.这段代码:
const sizeByColor = {
red: 100,
green: 500,
};
for ( const [ color, size ] of Object.entries(sizeByColor) ) {
console.log(color);
console.log(size);
}
Run Code Online (Sandbox Code Playgroud)
给出错误:
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"
]
}
Run Code Online (Sandbox Code Playgroud)
我想通过对象迭代Object.entries()
,所以我分配了内部定义"lib": [ "es2017" ]
,但仍然,typescript不允许我转换它.
Ole*_*hai 21
当我有一个全局编译器而不是./node_modules中的本地编译器时,我可以重现你的问题.
在我的情况下,编译器只是不知道要使用哪个tsconfig.json文件.将其指向特定的tsconfig.json文件有助于:
tsc --project ./tsconfig.json
我还在lib中添加了dom选项,因为es2017无法识别控制台:
"lib": [
"es2017",
"dom"
]
Run Code Online (Sandbox Code Playgroud)
这对我有用;当然,您可以在此处更改任何适合您的界面/类型......
for (const [field, values] of Object.entries<any>(filters)) {
Run Code Online (Sandbox Code Playgroud)
嗯,看起来我忘了注入core-js
polyfill Object.entries
.导入'core-js/fn/object/entries';
这个polyfill转换工程,但IDE仍然抱怨它.当我@types/core-js
直接包含,IDE是可以的,但由于"lib/es2017"中的重复声明,Typescript将崩溃..看起来像IDE(WebStorm)无法处理里面的"lib"设置tsconfig.json
编辑: 是的,我试图修改WebStorm设置,并将"使用TypeScript服务(实验)"设置为true后,一切正常!
如果您不想将全套ECMAScript 2017(ES8)包含在您的库集中,则也可以使用es2017.object
满足Object.entries
和相关的分辨率。
这是一个最小的工作示例:
src / index.ts
const sizeByColor = {
red: 100,
green: 500,
};
for (const [color, size] of Object.entries(sizeByColor)) {
console.log(color);
console.log(size);
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.json
{
"compilerOptions": {
"lib": ["dom", "es2016", "es2017.object"],
"rootDir": "src",
"target": "es6",
"outDir": "dist"
},
"exclude": [
"node_modules"
]
}
Run Code Online (Sandbox Code Playgroud)
注:如果"target"
设置为"es6"
默认,然后打字稿用途以下"lib"
条目(如果没有指定)["dom", "dom.iterable", "es6", "scripthost"]
。
"lib"
手动设置时,库的默认设置会被覆盖,这就是为什么我需要添加"dom"
(以console.log
在我的代码中使用)并"es6"
演示ES6和部分ES8("es2017.object"
)的原因。
归档时间: |
|
查看次数: |
20920 次 |
最近记录: |