typescript - TS1055 när man använder async/await med en typalias


Jag har deklarerat en typalias:

export type ActivationPromise = Promise<void>;

Jag har skrivit följande funktioner:

async function derp(): ActivationPromise {
    await test();
}

function test() : ActivationPromise {
    return Promise.resolve();
}

Min tsconfig.json:

{
    "compilerOptions": {
        "noImplicitAny": true,
        "removeComments": true,
        "preserveConstEnums": true,
        "sourceMap": true,
        "module": "commonjs",
        "target": "es5",
        "allowJs": true,
        "alwaysStrict": true,
        "importHelpers": true,
        "lib": [ "dom", "es5", "es2015.promise", "es2015.iterable", "scripthost"]
    },
    "compileOnSave": false
}

När jag kompilerar får jag:

fel TS1055: Typen 'ActivationPromise' är inte en giltig returtyp för en asynkron funktion i ES5/ES3 eftersom den inte refererar till en konstruktor som är kompatibel med Promise

Om jag ändrar returtypen till helt enkelt Promise<void>, kompileras koden utan problem. Endast när jag använder typaliaset uppstår problemet. Eftersom typaliaset bara borde fungera som en typedef, varför händer detta?

Svar #1

fel TS1055: Typen 'ActivationPromise' är inte en giltig returtyp för en asynkron funktion i ES5/ES3 eftersom den inte refererar till en konstruktor som är kompatibel med Promise

Förslag

Avstå från att typaliasa löften 🌹

Fixa

Om du använder alias, se till att du också har ett värde som stöder det, vilket kommer att vara den nämnda Promise-kompatibla konstruktör-instansen:

export type ActivationPromise = Promise<void>;
export const ActivationPromise = Promise<void>;

Relaterade artiklar