type interface
接口和类型别名都可以用来描述对象的形状或函数签名:
interface Point {x: number;y: number;}interface setPoint {(x: number, y: number): void}type tPoint = {x: number,y: number}type tSetPoint = (x: number, y: number) => void
与接口类型不一样,类型别名可以用于一些其他类型,比如原始类型、联合类型和元组
// primitivetype Name = string;// objecttype PartialPointX = { x: number; };type PartialPointY = { y: number; };// uniontype PartialPoint = PartialPointX | PartialPointY;// tupletype Data = [number, string];
接口和类型别名都能够被扩展,但语法有所不同。此外,接口和类型别名不是互斥的。接口可以扩展类型别名,而反过来是不行的。
interface PartialPointX { x: number; }interface Point extends PartialPointX {y: number;}
type PartialPointX = { x: number; };type Point = PartialPointX & { y: number; };
type PartialPointX = { x: number; };interface Point extends PartialPointX { y: number; }
interface PartialPointX { x: number; }type Point = PartialPointX & { y: number; };
类可以以相同的方式实现接口或类型别名,但类不能实现使用类型别名定义的联合类型:
interface Point {x: number;y: number;}class SomePoint implements Point {x = 1;y = 2;}type Point2 = {x: number;y: number;};class SomePoint2 implements Point2 {x = 1;y = 2;}type PartialPoint = { x: number; } | { y: number; };// A class can only implement an object type or// intersection of object types with statically known members.class SomePartialPoint implements PartialPoint { // Errorx = 1;y = 2;}
与类型别名不同,接口可以定义多次,会被自动合并为单个接口。
interface Point { x: number; }interface Point { y: number; }const point: Point = { x: 1, y: 2 };
