这不应该失败吗?
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?
在这种情况下有没有办法强制进行类型检查?
这不应该失败吗?
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?
在这种情况下有没有办法强制进行类型检查?
TypeScript 处理基于structural subtyping
.
结构类型是一种仅基于其成员关联类型的方法
特别是对于课程:
当比较一个类类型的两个对象时,只比较实例的成员。静态成员和构造函数不影响兼容性。
更多信息,请访问https://www.typescriptlang.org/docs/handbook/type-compatibility.html#classes
Animal
如果或Person
定义任何内容,它将失败:
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
由于您没有在Animal
or中定义任何内容Person
,因此字符串(或实际上是任何内容)履行了您要求的合同。