TypeScript中的联合类型 - 我能实现这一目标吗?

Boa*_*and 5 typescript typescript-typings

我想实现以下目标:

class MyClass {    
  boolProp: boolean;  
}

let a: string | MyClass;
a.boolProp = false; // error
Run Code Online (Sandbox Code Playgroud)

最后一行抛出一个错误,因为这就是typescript的工作原理.

我可以在没有错误的情况下实现上述目的,但是没有挡板吗?我只是希望能够告诉编译器某个变量或者是A型或B的,所以应该考虑它的"真实"的工会类型的属性和方法,而不只是常见的.

我熟悉其他语言的这种行为,根据我的喜好,这似乎是打字稿的功能要求.

我错过了什么吗?

Paa*_*rth 5

您希望补码键入联合,键入交集.

class MyClass {    
  boolProp: boolean;  
}

let a: string & MyClass;
a.boolProp = false; // no error
Run Code Online (Sandbox Code Playgroud)

类型联合会宣布变量是一种或另一种类型,因此您可以可靠访问的唯一属性是两者共有的属性.类型交集宣布变量满足两个类型契约,因此您可以访问属于其任一组件类型的属性 - 这是您想要的.