首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类方法中使用Uniontype和类型保护

在类方法中使用Uniontype和类型保护
EN

Stack Overflow用户
提问于 2022-06-22 18:36:31
回答 1查看 34关注 0票数 1

我不知道如何有效地使用工会类型的警卫。我试图对我的一些类方法使用联合类型,以便如果它们正常执行,则返回一个期望值,但如果失败,则返回一个自定义通知器对象。就像这样:

考虑一下这个例子:

代码语言:javascript
复制
class OpError {
    message : string;
    constructor(msg : string) {
        this.message = msg;
    }
}
class Foo {
    name: string;
}

class Bar {
    getFooName(myFoo : Foo) : string | OpError {
        if (!myFoo.name) {
            return new OpError("You forgot to name the Foo.")
        } else {
            return myFoo.name;
        }
    }
}

let myFoo = new Foo();
let myBar = new Bar();
let result = myBar.getFooName(myFoo);
if (typeof result === 'object') {
    console.log(result.message)
} else {
    console.log(result);
}

虽然说: string | OpError {的语法非常有用和优雅,但是类型守卫‘the of result === ' object ')看起来很笨拙,里面有一根神奇的字符串,如果“普通”返回值也是一个对象而不是原语,则无法工作。

看来一定有更好的办法,但不知道那可能是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-24 17:55:24

您可以使用JavaScript 运算符检查值是否是特定类(或其子类之一)的实例,并以所需的方式检查TypeScript 作为一种护卫

代码语言:javascript
复制
if (result instanceof OpError) {
  console.log(result.message) // okay
} else {
  console.log(result); // okay
}

操场链接到代码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72720476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档