#抽象类 interface type相似点很多,容易混淆使用#
抽象类(abstract)
定义类的格式,既可以包含抽象方法,也可以包含具体方法
一个类只能继承(extends)一个抽象类
abstract class Person {constructor(public name: string) {}abstract speak(): void
}class Chlid extends Person {constructor(name: stringpublic age: number) {super(name)}speak(): void {console.log('咿呀')}
}
interface
只能描述结构,不能有具体实现
一个类可以实现(implements)多个接口
更专注定义对象和类的结构,支持继承、合并
interface Person {name: stringage: number
}interface Person { // 合并speak: () => void
}interface Student extends Person { // 继承study: () => void
}
type
定义类型别名、联合类型(|)、交叉类型(&)
type Person {name: stringage: number
} & {speak: () => void
}type Student = Person & {study: () => void
}
interface和type都可以定义对象结构,大多场景可互换