ES6 Versprechen / Typoskript und das Bluebird-Versprechen

8

Ich habe ein Projekt nodejs / typescript 2 und verwende das Paket es6-promise . Jetzt möchte ich das Extra-Paket loswerden, da ich ES6 direkt in Typoskript ansprechen kann.

Also habe ich das Paket es6-promise entfernt und die Datei tsconfig.json in Ziel es6 geändert.

%Vor%

Viele 3rd-Party-Pakete verwenden das Bluebird-Versprechen, aber die Verheißungsdefinition ist nicht kompatibel mit dem Standard-es6-Versprechen, wie es in verschiedenen Beiträgen auf github angegeben ist.

So bekomme ich den folgenden Fehler.

  

TS2322: Typ 'Bluebird' kann nicht dem Typ 'Promise' zugewiesen werden. Die Eigenschaft '[Symbol.toStringTag]' fehlt im Typ 'Bluebird'.

Es gibt ein anderes Typenpaket auf npm @ types / bluebird-global . In einem der Blogpost schlägt ein Benutzer vor, es anstelle von @ types / bluebird zu verwenden, aber einige Pakete von Drittanbietern (zB Sequelize Typings) Referenz Bluebird und nicht Bluebird-Global, so bekomme ich einen weiteren Fehler für die fehlenden Typisierungen von Bluebird.

Was ist eine gute Lösung, um dies zum Laufen zu bringen?

    
dknaack 09.03.2017, 07:57
quelle

2 Antworten

0

Da es in Bluebird kein [Symbol.toStringTag] gibt, ist es in der Tat inkompatibel. Es gibt andere Dinge, die Bluebird-Implementierung von nativen Promise unterscheiden - Scheduler, Fehlerbehandlung ... Der richtige Weg, damit umzugehen ist:

%Vor%

Wenn die Laufzeitkompatibilität kein Problem darstellt, kann dies mit Typcasting nur relativ typsicher gehandhabt werden:

%Vor%

oder

%Vor%     
estus 06.09.2017 19:54
quelle
0

Ich habe es mit

zu tun gehabt
  

TS2322: Typ 'Bluebird' kann nicht dem Typ 'Promise' zugewiesen werden. Die Eigenschaft '[Symbol.toStringTag]' fehlt im Typ 'Bluebird'.

und diesen Thread gefunden: Ссылка

Die TL; DR; Version davon ist, eines der folgenden zu tun:

  1. Fügen Sie in jeder Ihrer .ts-Eintragsdateien Folgendes hinzu, um das globale Versprechen zu überschreiben:

    import * as Bluebird from 'bluebird';

    declare global { export interface Promise<T> extends Bluebird<T> {} }

Oder

  1. Umgehe alle Versprechen in einem Bluebird-Versprechen-Konstruktor. Es gibt einen Laufzeit-Overhead, der auf der Website von Bluebird als Anti-Pattern aufgeführt ist.

Nebenbei bemerkt, ich konnte die zweite Option nicht zum Arbeiten bringen, aber die erste funktionierte gut für mich.

    
Justin Kruse 02.01.2018 15:40
quelle