gpt4 book ai didi

javascript - typescript :有没有像联合类型一样工作的东西,除了我们可以访问并非所有联合类型都通用的属性?

转载 作者:行者123 更新时间:2023-11-30 15:33:30 25 4
gpt4 key购买 nike

“如果我们有一个具有联合类型的值,我们只能访问联合中所有类型共有的成员”

https://www.typescriptlang.org/docs/handbook/advanced-types.html

我正在寻找一种方法来使用可以是多种类型中的任何一种的动态变量,并通过它访问联合中所有其他类型不常见的一种类型的属性

edited example

最佳答案

将类型保护与联合类型结合使用。

下面的 Foo | Bar 联合类型可以是任何一种类型。通过使用类型保护,我们可以访问 Bar 不常见的属性 Foo

class Foo
{
public DoFoo = () => document.write("Foo");

public Shared = () => document.write("FooShared");
}

class Bar
{
public DoBar = () => document.write("Bar");

public Shared = () => document.write("BarShared");
}

function isFoo(obj: Foo | Bar): obj is Foo {
return obj instanceof Foo;
}

let foobar: Foo | Bar = new Foo();

foobar.Shared(); // FooShared

if (isFoo(foobar)) {
foobar.DoFoo(); // Foo
}

我们可以paste it here to play with it .

在回答您的评论时,如果变量未实例化而是传递给函数,情况如下所示:

function SomeFunction(foobar: Foo | Bar)
{
foobar.Shared(); // FooShared

if (isFoo(foobar)) {
foobar.DoFoo(); // Foo
}
}

关于javascript - typescript :有没有像联合类型一样工作的东西,除了我们可以访问并非所有联合类型都通用的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41927190/

25 4 0
文章推荐: javascript - 强制两个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com