接口:interface
interface Props {}
类型别名:type alias
type Props = {}
接口和类型别名的区别
// 一致的:接口和类型别名都可以描述对象的形状和函数签名interface Shape {x: number;y: number;}interface Func = {(x: number, y: number): void;}type Shape = {x: number;y: number;}type Func = (x: number, y: number) : void;// 不一致的:类型别名可以使用基本类型type Num = number;// 联合类型type PointX = { x: number };type PointY = { y: number };type Pnint = PointX & PointY;// 类型别名可以使用元祖type Tuple = [number, number]
继承
接口和类型别名都可以使用继承,但写法不一致,此外接口和类型别名不是互斥,接口可以继承类型别名,但类型别名不可以使用extends继承接口可以使用&合并。
// interface extends interfaceinterface Persion {name: string;age: number;}// 学生类继承人类interface Student extends Persion {num: number;}
// 类型别名继承类型别名type Persion = {name: string;age: number;}type Student = {num: number;} & Persion;
// 类型别名继承接口interface Persion {name: string;age: number;}type Student = {num: number;} & Persion;
实现 implements
类可以实现接口或类型别名,但不是实现类型别名的联合类型
interface Persion {name: string;age: number;}class jeff implements Persion {name = 'jeff';age = 12;}type Persion2 = {name: string;age: number;}class jeff2 implements Persion2 {name = 'jeff';age = 12;}type Persion3 = { name: string } | { age: number};// A class can only implement an object type or intersection of object types with statically known members.// 类只能实现对象类型或对象类型与静态已知成员的交集。class jeff3 implements Persion3 {name = 'jeff3'age = 12}
接口声明合并
和类型别名不同,接口可以定义多次,会被自动合并为单个接口
interface Point { x: number; }interface Point { y: number; }const point: Point = { x: 1, y: 2 };
