Usar una promesa personalizada como un tipo genérico
Tengo un módulo TypeScript ambiental que representa una biblioteca que admite cualquier biblioteca Promises / A +:
interface Test {
funcName():Promise<string>;
}
Por lo tanto, necesito ajustarlo de tal manera que el protocolo de cualquier biblioteca prometedora sea accesible a nivel declarativo:
interface Test<P> {
funcName():P<string>;
}
Pero el TypeScript se queja inmediatamente:Type 'P' is not generic
, incluso antes de usarlo.
Tenga en cuenta que no puedo incluir una biblioteca de promesa personalizada en el mismo archivo queTest
, porque tengo que pasarlo desde otro módulo.
Y si cambio el código a esto:
interface AnyPromise<T, P extends Promise<T>> {
}
interface Test<P> {
funcName():AnyPromise<string, P<string>>;
}
También se quejaerror TS2315: Type 'P' is not generic.
dentro de esta parte:P<string>
.
Al final necesito poder hacer algo como esto:
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)
Para aclarar de nuevo, utilizo Bluebird solo como ejemplo, ya que necesito una solución para admitir cualquier biblioteca prometedora, no una específica.