开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
枚举类型兼容性
- 数字枚举与数字兼容 定义了一个枚举类型,然后定义一个变量类型为该枚举,给这个变量赋值枚举值可以,赋值数字也可以,都不报错,说明数字枚举和数字兼容
enum Gender {
Mate,
FeMate
}
let value: Gender;
value = Gender.Mate;
value = 100;
- 数字枚举与数字枚举不兼容 定义两个枚举类型,定义一个变量为其中一个枚举的类型,给变量赋值类型对应的枚举值可以,赋值另一个枚举值报错。
enum Gender {
Mate,
FeMate
}
enum Animal {
Gog,
Cat
}
let value: Gender;
value = Gender.Mate;
value = Animal.Gog;
- 字符串枚举与字符串不兼容 声明一个字符串枚举,,定一个变量为该枚举的类型,给变量赋值该枚举成员均可,但是给该变量赋值字符串不行,直接报错了,虽然字符串的值和枚举的值一模一样。
enum Gender {
Mate = "实则棒",
FeMate = "大坏蛋"
}
let value: Gender;
value = Gender.Mate;
value = Gender.FeMate;
value = "大坏蛋"
类的兼容性
类的工作方式与对象字面类型和接口类似,但有一个例外;他们同时具有静态和实例类型,当比较一个类类型的两个对象时,只有实例的成员比较,静态成员和构造函数不影响兼容性 一个类中的私有成员和保护成员会影响其兼容性,当一个类的实例被检查兼容性时,如果目标类型包含一个私有成员,那么源类型也必须包含一个源自同一个类的私有成员,同样的,这也适用于有保护成员的实例,这允许一个类与它的超类进行赋值兼容,但不允许与来自不同继承层次的类型进行赋值兼容,否则就会有相同情况
public 可多不可少
class Animal {
feet: number;
age: number;
constructor(feet: number, age: number) {
this.age = age;
this.feet = feet;
}
}
class Size {
feet: number;
constructor(feet: string) {
this.feet = 2
}
}
let a: Animal = new Animal(2, 3);
let s: Size = new Size('23')
s = a;
a = s;
s赋值给a就报错了,缺少age.
不是来自同一个类的私有属性不兼容,俩私有属性都是一样的,但是不来自同一个类,所有不兼容
class Animal {
private feet: number;
constructor(feet: number, age: number) {
this.feet = feet;
}
}
class Size {
private feet: number;
constructor(feet: string) {
this.feet = 2
}
}
let a: Animal = new Animal(2, 3);
let s: Size = new Size('23')
s = a;
a = s;
下面的是可以的
class Base {
private feet: number;
constructor(feet: number) {
this.feet = feet;
}
}
class Animal extends Base {
constructor(feet: number, age: number) {
super(feet)
}
}
class Size extends Base {
constructor(feet: number) {
super(feet)
}
}
let a: Animal = new Animal(2, 3);
let s: Size = new Size(233)
s = a;
a = s;