node.js - Typescript 函数返回两个不同的对象

标签 node.js typescript types tsconfig ts-node

我对 TypeScript 还很陌生,我正在尝试弄清楚如何让这个东西发挥作用。 我进行了一些广泛的谷歌搜索,但最终求助于 Stack Overflow。

我有一个函数,它根据某些条件返回用户对象或错误对象。 当我调用这个函数时,我似乎无法在不出现以下错误的情况下处理不同的情况。

Property 'error' does not exist on type 'User | Error'.
  Property 'error' does not exist on type 'User'.ts(2339)

这里有一些代码来演示我的目标,错误发生在 main() 函数中的 >> 处。

interface User {
    email: string;
    username: string;
}

interface Error {
    error: string;
    code: number;
}

async function get_user_info(user_id: number): Promise<User | Error> {
    const result = await db.get_user(user_id); // let's say this returns false if no user found..
    if (result) {
        const user: User = {
            email: result.email,
            username: result.username
        }
        return user;
    } else {
        const err: Error = {
            error: "Failed to fetch user.",
            code: 583
        }
        return err;
    }
}

async function main() {
    const res = await get_user_info(42);
>>  if (res.error) {
        // handle this...
    } else {
        // continue onwards...
    }
}

我错过了什么,还是这种事情根本不可能?

最佳答案

应用类型保护,通过检查 error 属性是否存在来测试它是 User 还是 Error 对象:

async function main() {

    const res = await get_user_info(42);

    if ('error' in res) {
         if (res.error) {
             // handle this...
         }
    } else {
        // continue onwards...
    }
}

关于node.js - Typescript 函数返回两个不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59703856/

相关文章:

javascript - Mongoose 通过在引用中搜索自动填充数据

javascript - HTTP GET 生成 Excel 工作簿,用 Express 响应,然后自动下载文件?

javascript - Typescript私有(private)方法 "is not a function"

Haskell Curl 帮助

带数组的 JavaScript 字符串格式

hash - node.js 哈希字符串?

Typescript - 根据给定键确定子对象的类型

scala - 为什么 Scala 编译器在 2.10 中对 self 类型变得更加严格?

angular - 如何制作标记界面或类似的东西

angular - 我怎样才能将我的 ionic cli 降级到以前的版本?