2017-07-21 16 views
2

私は、非同期/待機といくつかのネイティブな約束事を使用し、関数のデフォルト値を使用するnodeJS-Express-Typescriptプロジェクトを持っています。 IDEは、このエラーについて私に警告しasync/await、Promise、およびfunctionのデフォルトパラメータを持つTypescript

sleep(ms: number) { 
    return new Promise(resolve => setTimeout(resolve, 500)); 
} 

async someFunction(param = "default") { 
    doStuff(param); 

    await sleep(500); 

    doSomeMoreStuff(); 
} 

$ tsc -p . 

error TS2468: Cannot find global value 'Promise'. 
spec/routes/users.spec.ts(508,23): error TS2705: An async function or method in ES5/ES3 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option. 
src/utils/sleep.ts(10,20): error TS2693: 'Promise' only refers to a type, but is being used as a value here. 

ので、私は私のtsconfig.jsonにターゲットとしてes2015を追加する必要があります。

"target": "es2015" 
これは私が達成できるかの簡単な例だろう

しかし、このエラーは、移動したJSを実行するときに発生します。

/../users-api/dist/src/repository/realm-helper.js:21 
    static init(development = false) { 
          ^

SyntaxError: Unexpected token = 
    at exports.runInThisContext (vm.js:53:16) 
    at Module._compile (module.js:373:25) 
    at Object.Module._extensions..js (module.js:416:10) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Module.require (module.js:353:17) 
    at require (internal/module.js:12:17) 
    at Object.<anonymous> (/../users-api/dist/src/routes/users.js:4:24) 
    at Module._compile (module.js:409:26) 
    at Object.Module._extensions..js (module.js:416:10) 

だから私は「ES5」にターゲットを変更する必要があること:

"target": "es5" 

悪循環につながります。

"target"と "module"の値を変更しようとしましたが、常に失敗します。

ここに何か不足していますか?理論的には、typescript 2.2は両方の機能をサポートしているので、私はなぜトランスカリルできないのか分かりません。

tsconfig.json

{ 
    "compilerOptions": { 
     "outDir": "./dist/", 
     "rootDir": ".", 
     "sourceMap": true, 
     "module": "commonjs", 
     "target": "es5" 
    }, 
    "include": [ 
     "./src/**/*", 
     "./spec/**/*" 
    ] 
} 

typescriptです 2.4.1

ノード 4.4.7

答えて

3

試行tsconfig.jsonにes2015.promiseとLIBセクションを追加

"lib": [ 
     "dom", 
     "es5", 
     "scripthost", 
     "es2015.promise" 
    ], 

ここで完全なサンプルを見ることができます:https://github.com/basarat/typescript-book/tree/master/code/async-await/es5

+0

こんにちは、お返事ありがとうございます。これらを追加すると、このエラーが発生します。 'エラーTS2488:タイプには、各行にfor-ofループがある 'イテレータを返す' [Symbol.iterator]() 'メソッドが必要です。 – josemigallas

+0

"es2015"を追加すると、完全なes2015フィーチャーセット –

+0

が追加されます。何もありません...同じエラー_Unexpected token = _コードは、あなた自身で/ https://github.com/josemigallas/を打ちたい場合に表示されます。 users-api/tree/async_await_es5 – josemigallas

関連する問題