javascript - Hur fixar man returtypen för den sista promise i en kedja?


Jag vill returnera det sista löftet i en kedja som resultat av en funktion. Jag använder TypeScript 1.7 och inbyggda ES6-löften.

Jag provade detta, men TS betraktar det första löftet som returvärdet (Uint8Array), inte CryptoKey från importKey. Jag har sett JavaScript-exempel som får mig att tro att det sista löftet faktiskt är returvärdet, så kanske är TS bara förvirrat?

private getKey(): Promise<Uint8Array> {
    return localforage.getItem<Uint8Array>("key")
        .then<Uint8Array>((derivedKeyData) => {
            return crypto.subtle.importKey("raw", derivedKeyData, { name: "AES-GCM" }, false, ["decrypt"]);
        });
}

Hur returnerar jag det inre löftet som resultatet av funktionen? Eller åtminstone övertygar TS om att det är vad som verkligen händer utan att göra funktionens returtyp till 'any'?

Svar #1

Jag tittade på din kod på http://www.typescriptlang.org/Playground och problemet verkar vara att den inbyggda resulterande typen av importKey är 'any'