2017-07-21 14 views
2

Ich habe ein Projekt nodeJS-Express-Typescript, in dem ich einige native Versprechungen mit async/await und auch einige Standardwerte für eine Funktion verwenden möchte. Dies wäre ein einfaches Beispiel für das, was ich erreichen kann:Typescript mit async/await, Standardparameter für Promise und Funktion

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

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

    await sleep(500); 

    doSomeMoreStuff(); 
} 

Die IDE warnt mich über diesen Fehler:

$ 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. 

so muss ich es2015 als Ziel hinzufügen in meinem tsconfig.json:

"target": "es2015" 

Aber dann kommt dieser Fehler beim Ausführen der transpiled 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) 

So, dass ich das Ziel „ES5“ ändern:

"target": "es5" 

was zu einem Teufelskreis führt.

Ich habe versucht, den Wert von "Ziel" und "Modul" zu ändern und es schlägt immer etwas fehl.

Fehle ich hier etwas? In der Theorie unterstützt Typoskript 2.2 beide Funktionen, weshalb ich nicht verstehe, warum ich nicht transponieren kann.

tsconfig.json

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

Maschinenschrift 2.4.1

Knoten 4.4.7

Antwort

3

Versuchen Sie, lib Abschnitt mit es2015.promise in tsconfig.json

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

Sie können das vollständige Beispiel hier sehen: https://github.com/basarat/typescript-book/tree/master/code/async-await/es5

+0

Hallo, vielen Dank für die Beantwortung. Nach dem Hinzufügen dieser, wirft es mir diesen Fehler 'Fehler TS2488: Typ muss eine '[Symbol.iterator]()' Methode, die einen Iterator.' in jeder Zeile a haben eine For-of-Schleife haben. – josemigallas

+0

füge "es2015" hinzu, dann wirst du full es2015 feature set hinzufügen –

+0

Nothing ... selbe error _Unerwartetes token = _ Der Code ist hier, wenn du selbst eine Chance geben willst:/https://github.com/josemigallas/ Benutzer-api/Baum/async_await_es5 – josemigallas

Verwandte Themen