javascript - TypeScript-definisjon (d.ts) for Q "noConflict()"


Jeg jobber for øyeblikket med et prosjekt hvor jeg bruker Q-biblioteket for løfter med TypeScript.

Den nyeste versjonen av Q har metoden Q.noConflict(). For typingen bruker jeg .d.ts-filen fra DefinitelyTyped-repositoriet.

Skrivingen støtter ikke Q.noConflict(). Jeg prøvde i flere timer å omskrive skrivemåten for å støtte denne metoden, men uten suksess.

Jeg vil gjerne bruke koden slik:

var myQ = Q.noConflict();

Hvor myQ er av typen Q. Men i .d.ts er Q et modul som har både grensesnitt og funksjoner. Det betyr at jeg ikke bare kan legge til noe som dette noConflict(): Q.

Her er skjemaet fra definisjonsfilen (ikke hele filen, men med alle relevante deler):

erklær funksjon Q(verdi: T): Q.Promise;

declare module Q {
    interface IPromise<T> {
        then<U>(onFulfill?: (value: T) => U | IPromise<U>, onReject?: (error: any) => U | IPromise<U>): IPromise<U>;
   }

    interface Deferred<T> {
        promise: Promise<T>;
    }

    interface Promise<T> {
        get<U>(propertyName: String): Promise<U>;
    }

    export function when(): Promise<void>;

    export function resolve<T>(object: T): Promise<T>;
}

declare module "q" {
    export = Q;
}

Selvfølgelig forventer jeg ikke å få hele koden, men det ville vært flott å få noen hint fra folk som allerede har skrevet noen .d.ts-filer.

Svar #1

Bruk typeof Q som returtype:

declare module Q {
    // ...
    export function noConflict(): typeof Q;
    // ...
}

Relaterte artikler