В TypeScript, как использовать обещания с реализацией RSVP на Node.js

#node.js #typescript #promise #definitelytyped #rsvp-promise

#node.js #машинопись #обещание #определенно типизированный #ответное приглашение-обещание

Вопрос:

Вкл. Node.js , как правильно использовать promises с TypeScript?

В настоящее время я использую файл определения «rsvp.d.ts»:

 interface Thenable {
    then(cb1: Function, cb2?: Function): Thenable;
}
declare module rsvp {
    class Promise implements Thenable {
        static cast(p: Promise): Promise;
        static cast(object?): Promise;
        static resolve(t: Thenable): Promise;
        static resolve(obj?): Promise;
        static reject(error?: any): Promise;
        static all(p: Promise[]): Promise;
        static race(p: Promise[]): Promise;
        constructor(cb: Function);
        then(cb1: Function, cb2?: Function): Thenable;
        catch(onReject?: (error: any) => Thenable): Promise;
        catch(onReject?: Function): Promise;
    }
}
 

… и в моем файле «.ts»:

 /// <reference path='../node.d.ts' />
/// <reference path='rsvp.d.ts' />
global['rsvp'] = require('es6-promise');
var Promise = rsvp.Promise;
var p: Thenable = new Promise(function (resolve) {
    console.log('test');
    resolve();
});
 

Это работает, но ссылка на «глобальный» уродлива.

ПРИМЕЧАНИЕ. Мне не удалось использовать файл определения из DefinitelyTyped .

Ответ №1:

Правильное исправление

Просто обновил определения для поддержки правильного способа: https://github.com/borisyankov/DefinitelyTyped/pull/2430

Итак, используя те же определения (https://github.com/borisyankov/DefinitelyTyped/tree/master/es6-promises ) теперь вы можете сделать:

 import rsvp = require('es6-promises');
var Promise = rsvp.Promise;
 

Просто предложение на будущее

Это работает, но ссылка на «глобальный» уродлива.

Вы можете сделать :

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

Комментарии:

1. Спасибо. Что касается предложения, tsc был в порядке, но WebStorm сообщил (по ошибке) об ошибке.