ES6-promises'i TypeScript ile nasıl kullanılır?
Bu SO sorusunu okudum ama TypeScript ile promise'leri çalıştırmakta zorlanıyorum. Umarım net bir rehber oluşturabiliriz. Bu bir sunucu/node projesi için. Aslında en son iojs sürümünü kullanıyorum, ama çıktı olarak ES5'i hedefliyorum.
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;
}
bu hatayı veriyor:
Cannot find name 'Promise'.
// alternatif olarak:
var p = new Promise<string>((resolve, reject) => {
resolve('a string');
});
//error=> Untyped function calls may not accept type arguments.
Kendi Node sunucu tarafı kodunuzdan bir Promise döndürmenin önerilen yolu nedir?
referanslar:
https://www.npmjs.com/package/es6-promise
https://github.com/borisyankov/DefinitelyTyped/blob/master/es6-promise/es6-promise-commonjs-tests.ts
Cevap #1
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
Cevap #2
Aşağıdakiler, hedef es5 olarak ayarlandığında v2.1.1+ sürümünde bulunuyordu
es6-promise paketini kurup dosyanın en üstüne bunu ekleyerek async/await ile Promises kullanabildim:
global.Promise = require('es6-promise').Promise;
Ve bu da tsconfig.json için
"lib": [ "es2015.promise", "es5" ],
import { Promise } biçimini kullanmak benim için işe yaramadı çünkü diğer kütüphaneler çöküyordu (ör: axios)
