1、介绍
Typescript里的类型兼容是基于结构子类型的。
结构子类型是一种只使用其成员来描述类型的方式。
interface Person{
name:string,
age: number,
}
interface Man{
name:string,
age:number
}
let p:Person;
p = new Man(); // 这是被允许的2、初识类型兼容
兼容规则:如果x要兼容y,那么y至少具有与x相同的属性。
interface Person{
name:string,
}
interface Man{
name:string,
age:number
}
let m:Man;
let p = {name:"lisi",age:12};
m = p; // 这是被允许的,因为m具有的属性,y都具备3、比较两个函数
即判断两个函数是否兼容
let a = (x:number) => 0;
let b = (y:number,z:string) =>0
a = b;// 成立的,因为a函数中的属性b函数中都有
b = a;// 不成立,因为b函数中的属性a函数中不全有4、枚举
枚举类型与数字类型兼容,并且数字类型和枚举类型兼容。
不同枚举之间是不兼容的。
enum Status { Ready, Waiting };
enum Color { Red, Blue, Green };
let status = Status.Ready;
status = Color.Green; // Error5、类
类与对象字面量和接口差不多
但是有一点不同:类有静态部分和实例部分的类型。
比较两个类类型的对象时,只有实例的成员会被比较。
静态成员和构造函数不在比较范围内。
class Person {
name: string;
constructor(name: string, age: number) {
}
}
class Man {
name: number;
constructor(name:string,age: number) {
}
}
let p: Person;
let m: Man;
p = m; // OK
m = p; // OK6、泛型
因为Typescript是结构类型系统,类型参数只影响使用其作为类型一部分的结果类型。
interface Person<T> {}
let p1: Person<number>;
let p2: Person<string>;
x = y; // OK
// x和y是兼容的,因为他们的结构使用类型参数一致。