2015-09-05 13 views
40

私はthis SO questionを読んでいますが、typescriptで作業することはできません。うまくいけば私達は明確なガイドを作ることができます。 これは、サーバー/ノードプロジェクト用です。実際には最新のiojsを使用していますが、ES5を出力としてターゲット設定しています。typescriptでes6-promisesを使用するには?

$ tsd query es6-promise --action install --save 
$ npm install --save es6-promise 


// typescript code: 

/// <reference path="../../typings/es6-promise/es6-promise.d.ts"/> 

var Promise = require("es6-promise").Promise; 
require('es6-promise').polyfill(); 

function test():Promise { 
    var p:Promise = new Promise(); 
    return p; 
} 

これはエラーを与えている:

代わり
Cannot find name 'Promise'. 

//:

var p = new Promise<string>((resolve, reject) => { 
    resolve('a string'); 
}); 


//error=> Untyped function calls may not accept type arguments. 

独自のノードサーバ側のコードからの約束を返すために推奨される方法は何ですか?

参照:

答えて

45

main.ts

import {Promise} from 'es6-promise'; 
const p: Promise<string> = new Promise (
    (resolve: (str: string)=>void, reject: (str: string)=>void) => { 
     const a: string = "hello from Promise"; 
     resolve(a); 
    } 
); 
p.then((st) => { 
    console.log(st); 
}); 

tsconfig.json

{ 
    "compilerOptions": { 
     "target": "es3", 
     "module": "commonjs", 
     "declaration": false, 
     "noImplicitAny": false, 
     "noLib": false 
    }, 
    "filesGlob": [ 
     "./**/*.ts", 
     "!./node_modules/**/*.ts" 
    ], 
    "files": [ 
     "./main.ts", 
     "./typings/es6-promise/es6-promise.d.ts" 
    ] 
} 

compileandrun.sh

#!/bin/sh 
npm install es6-promise 
tsd install es6-promise 
tsc 
node main.js 
+0

大変ありがとう、ありがとう! – dcsan

+2

'tsd'ではなく' typings'を使うようになったのですか? –

+5

Angular 2を使用している場合の注意:import promise文は必要ありません(使用するべきではありません)、Angular 2フレームワークにバンドルされているので、es6-promise.d.tsは必要ありません。とにかく、ベータ版の15)。 –

10

以下がV2.1.1に+ Iがes6-promiseをインストールした後、これを添加することにより、async/awaitと約束を使用することができたes5

に設定された目標でしたファイルの先頭に:

global.Promise = require('es6-promise').Promise; 

他のライブラリがクラッシュされたとして私のために動作しませんでしたimport { Promise }フォームを使用してtsconfig.json

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

に(例:axios)

1

を、以下の追加package.jsonへ:

"devDependencies": { 
"@types/es6-promise": "^0.0.32" 
}, 
"dependencies": { 
"es6-promise": "~4.1.0" 
} 
+0

これを行うと 'Promise'をインポートする必要がありますか? –

0

変更対象あなたのtsconfig.jsonの "es6"へ

"compilerOptions": {"target": "es6" } 

またはVisual Studio 2015用の活字をインストールするも、私は別の枠組み(具体的には、axios)のためにこれをでポリフィルするために必要な

https://www.microsoft.com/en-us/download/details.aspx?id=48593

3

tsconfig.json変更せずにこの問題を解決することができます。私は実際に自分の約束を作成する必要はなかったので、これらの解決策のどれも私にとっては役に立たなかった。幸いにも、答えはよく隠されていれば簡単でした:

import { polyfill } from 'es6-promise' 

polyfill(); 
+0

私はちょうど遅れた応答をしましたが、私はちょうどチャイムしたいと思いました。 TS 2.7.2では、他のフレームワーク(Angularはありません)がなく、es6の約束事、そして 'polyfill()'がIE11をサポートする最も簡単な方法でした。 ありがとうございます。 – mschofield

関連する問題