打字稿承诺<MyClass | undefined> 不返回可选变量

Jef*_*hen 6 undefined promise typescript visual-studio-code

我有一个基本上像这样的功能

function foo(): Promise<MyClass | undefined> {
    if(somethingGoesWrong) {
        return Promise.resolve(undefined);
    }
    return Promise.resolve(new MyClass());
}
Run Code Online (Sandbox Code Playgroud)

在函数之外,我称之为

const x = await foo()
Run Code Online (Sandbox Code Playgroud)

问题是我的 VSCode IDE 不会将 x 视为MyClass | undefined. 就这样吧MyClass

我不知道这是一个IDE问题还是有诸如“Promise无法解析未定义”之类的规则。

我知道更好的方法可能是抛出一些错误而不是返回未定义,我只是想知道为什么这不起作用或似乎不起作用。

Mar*_*rco 2

您可以声明您的函数将返回void而不是undefined.

function foo(p: string): Promise<string | void> {
    if(p.length === 0) {
        return Promise.resolve(undefined);
    }
    return Promise.resolve(t);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果你调用你的函数,VSCode 将遵守你的函数不能返回任何内容。Vscode 将以红色 .length 下划线。

foo("").then((t) => {
    t.length;
});
Run Code Online (Sandbox Code Playgroud)

您可以将相同的事情应用于同步功能。

我选择使用字符串而不是类来简化示例。