"如果我们有一个具有联合类型的值,我们只能访问联合中所有类型共有的成员"
https://www.typescriptlang.org/docs/handbook/advanced-types.html
我正在寻找一种方法来使用可以是多种类型中的任何一种的动态变量,并通过它来访问其中一种类型的属性,这些类型对于所有其他类型都不常见。联盟
答案 0 :(得分:2)
将类型保护与联合类型结合使用。
以下Foo | Bar
联合类型可以是任何一种类型。通过使用类型保护,我们可以访问Foo
不常见的属性Bar
。
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
}
}