将es7映射到es6错误意外标识符

时间:2017-08-21 06:51:23

标签: javascript node.js typescript transpiler

我已经从es7到es6编译了一段javascript代码,因为我需要使用

  

Node.js 6.9.5

但是我在转换时遇到了这个错误:

意外标识符keyValues [key] = yield DbStorage.get(key);

我的代码如下:

getMany: function (keys) {
    return new Promise((resolve, reject) => {
        let keyValues = {};

        for(let key of keys){
            keyValues[key] = await DbStorage.get(key);
        }

        resolve(keyValues);
    });
},

并且转换后的代码如下所示:

 getMany: function (keys) {
    return new Promise((resolve, reject) => {
        let keyValues = {};
        for (let key of keys) {
            keyValues[key] = yield DbStorage.get(key);
        }
        resolve(keyValues);
    });
},

我正在使用typescript来转换我的tsconfig.json,如下所示:

{
"allowJs" : true,
"compilerOptions": {
    "target": "es6",
    "sourceMap": true,
    "removeComments": false,
    "listFiles" : false,
    "diagnostics" : false, 
    "outDir" : "build",
    "allowJs" : true,
    "inlineSourceMap" : false
},
"include" : ["collaboration/*"],
"exclude": [ "build", "node_modules" ]

}

所以这有什么不对?

1 个答案:

答案 0 :(得分:0)

您在非await功能中使用async,这是不正确的。 getMany应为async,其中包括您不需要new Promise

getMany: async function (keys) {
//       ^^^^^
    let keyValues = {};

    for (let key of keys){
        keyValues[key] = await DbStorage.get(key);
    }

    return keyValues;
},

TypeScript编译器将错误的await转换为错误的yield非常奇怪,但它可能是TypeScript编译器中的边缘错误。如果您修复了使用情况,希望它能正确转换。