TS1055使用async / await时使用类型别名

时间:2017-08-27 08:01:40

标签: typescript

我已经声明了一个类型别名:

export type ActivationPromise = Promise<void>;

我写了以下功能:

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

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

我的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
}

当我编译时,我得到:

  

错误TS1055:输入&#39; ActivationPromise&#39;在ES5 / ES3中不是有效的异步函数返回类型,因为它不引用与Promise兼容的构造函数

如果我将返回类型更改为Promise<void>,则代码编译正常。仅在使用类型别名时,才会出现问题。由于类型别名应该只是typedef,为什么会发生这种情况?

1 个答案:

答案 0 :(得分:8)

  

错误TS1055:输入&#39; ActivationPromise&#39;在ES5 / ES3中不是有效的异步函数返回类型,因为它不引用与Promise兼容的构造函数

建议

避免类型别名承诺

修复

如果您是别名,请确保您有一个value backing it as well,它将是提及的Promise-compatible constructor实例:

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