Использование настраиваемого обещания в качестве универсального типа

У меня есть окружающий модуль TypeScript, представляющий библиотеку, которая поддерживает любую библиотеку Promises / A +:

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

Поэтому мне нужно настроить его так, чтобы протокол любой библиотеки обещаний был доступен на декларативном уровне:

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

Но TypeScript немедленно жалуется:Type 'P' is not genericпрежде, чем я даже использую это.

Обратите внимание, что я не могу включить библиотеку пользовательских обещаний в тот же файл, что иTestпотому что я должен передать его из другого модуля.

И если я изменю код на это:

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

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

Также жалуетсяerror TS2315: Type 'P' is not generic. в этой части:P<string>.

В конце я должен быть в состоянии сделать что-то вроде этого:

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)

Чтобы пояснить еще раз, я использую Bluebird в качестве примера, поскольку мне нужно решение для поддержки любой библиотеки обещаний, а не одной конкретной.

Ответы на вопрос(1)

Ваш ответ на вопрос