类型兼容
interface Named{name:string}let x : Namedlet y = {name:'jojo',age:18}x = y
函数比较
let x = (a:number)=> 0let y = (a:number,s:string)=> 0y = x// x = y //不兼容 报错
枚举
枚举类型与数字类型兼容,并且数字类型与枚举类型兼容。不同枚举类型之间是不兼容的
enum Status { Ready, Waiting };enum Color { Red, Blue, Green };let status = Status.Ready;status = Color.Green; // Error
类
类与对象字面量和接口差不多,但有一点不同:类有静态部分和实例部分的类型。
- 比较两个类类型的对象时,只有实例的成员会被比较。
静态成员和构造函数不在比较的范围内。
class Animal {feet: number;constructor(name: string, numFeet: number) { }}class Size {feet: number;constructor(numFeet: number) { }}let a: Animal;let s: Size;a = s; // OKs = a; // OK
泛型
因为TypeScript是结构性的类型系统,类型参数只影响使用其做为类型一部分的结果类型
interface Empty<T> {}let x: Empty<number>;let y: Empty<string>;x = y; // OK, because y matches structure of xlet x: NotEmpty<number>;let y: NotEmpty<string>;x = y; // errorlet identity = function <T>(x: T): T {// ...}let reverse = function <U>(y: U): U {// ...}identity = reverse; // ok
