4

这不应该失败吗?

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?

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

4

2 回答 2

4

TypeScript 处理基于structural subtyping.

结构类型是一种仅基于其成员关联类型的方法

特别是对于课程:

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

更多信息,请访问https://www.typescriptlang.org/docs/handbook/type-compatibility.html#classes

于 2017-01-05T02:26:36.213 回答
3

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

由于您没有在Animalor中定义任何内容Person,因此字符串(或实际上是任何内容)履行了您要求的合同。

于 2017-01-05T02:24:50.200 回答