工会类型是否未执行?

时间:2017-01-05 02:19:52

标签: typescript typechecking static-typing union-types

这不应该失败吗?

class Animal { }
class Person { }

type MyUnion = Number | Person;

var list: Array<MyUnion> = [ "aaa", 2, new Animal() ]; // Shouldn't this fail?

var x: MyUnion = "jjj"; // Shouldn't this fail?

在这种情况下,有没有办法强制进行类型检查?

2 个答案:

答案 0 :(得分:4)

TypeScript根据structural subtyping处理类型兼容性。

  

结构化打字是一种仅根据其成员关联类型的方式

特别是课程:

  

比较类类型的两个对象时,只比较实例的成员。静态成员和构造函数不会影响兼容性。

https://www.typescriptlang.org/docs/handbook/type-compatibility.html#classes

的更多信息

答案 1 :(得分:3)

如果AnimalPerson定义了任何内容,则会失败:

class Animal { name: string; }
class Person { age: Number; }

type MyUnion = Number | Person;

var list: Array<MyUnion> = [ "aaa", 2, new Animal() ]; // Fails now

var x: MyUnion = "jjj"; // Fails now

由于您未在AnimalPerson中定义任何内容,因此字符串(或其他任何内容)都符合您要求的合同。