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?
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:
Wenn die Laufzeitkompatibilität kein Problem darstellt, kann dies mit Typcasting nur relativ typsicher gehandhabt werden:
%Vor%oder
%Vor%Ich habe es mit
zu tun gehabtTS2322: 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:
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
Nebenbei bemerkt, ich konnte die zweite Option nicht zum Arbeiten bringen, aber die erste funktionierte gut für mich.
Tags und Links javascript typescript ecmascript-6 bluebird