Verwenden eines benutzerdefinierten Versprechens als generischen Typ

Ich habe ein Umgebungs-TypeScript-Modul, das eine Bibliothek darstellt, die jede Promises / A + -Bibliothek unterstützt:

interface Test {
  funcName():Promise<string>;
}

So muss ich es so anpassen, dass das Protokoll jeder Versprechungsbibliothek auf deklarativer Ebene zugänglich ist:

interface Test<P> {
  funcName():P<string>;
}

Aber das TypeScript beschwert sich sofort:Type 'P' is not generic, bevor ich es überhaupt benutze.

Bitte beachten Sie, dass ich keine benutzerdefinierte Versprechenbibliothek in dieselbe Datei wie @ aufnehmen kanTest, weil ich es von einem anderen Modul aus weitergeben muss.

Und wenn ich den Code in diesen ändere:

interface AnyPromise<T, P extends Promise<T>> {
}

interface Test<P> {
    funcName():AnyPromise<string, P<string>>;
}

Es beschwert sich aucherror TS2315: Type 'P' is not generic. innerhalb dieses Teils:P<string>.

m Ende muss ich in der Lage sein, so etwas zu tun:

import * as promise from 'bluebird'; // from Bluebird ambient declarations 
import {Test} from 'test';

var Test<promise> t; // plus initialize it;

t.funcName().finally(())=>{
}); // NOTE: 'finally' is to be visible from Bluebird (doesn't exist in ES6 Promise)

Um es noch einmal zu verdeutlichen, verwende ich Bluebird nur als Beispiel, da ich eine Lösung brauche, um jede Bibliothek zu unterstützen, die Versprechen enthält, nicht eine bestimmte.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage