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)

İlgili makaleler