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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta