type Message = string | string[]
interface Person {
name: string;
age: number;
}
const tom: Person = {
name: 'Tom',
age: 25
};
interface SayHello {
(name: string): string;
}
const func: SayHello = (name: string) => {
return 'hello,' + name
}
interface PersonConstructor {
new (name: string, age: number): IPerson;
}
function createPerson(ctor: PersonConstructor):IPerson {
return new ctor('guang', 18);
}
interface Person {
readonly name: string;
age?: number;
}
interface Person {
readonly name: string;
age?: number;
[key: string]: any;
}
- 两者都可以用来描述对象或函数的类型,但是语法不同
interface Point {
x: number;
y: number;
}
interface SetPoint {
(x: number, y: number): void;
}
type Point = {
x: number;
y: number;
};
type SetPoint = (x: number, y: number) => void;
- 类型别名还可以用于其他类型(如字面量类型),但接口不行
- 接口可以定义多次,类型别名不可以
interface Point { x: number; }
interface Point { y: number; }
const point: Point = { x: 1, y: 2 };
- 扩展
- 接口的扩展就是继承,通过
extends
来实现 - 类型别名的扩展就是交叉类型,通过
&
来实现
interface PointX {
x: number
}
interface Point extends PointX {
y: number
}
type PointX = {
x: number
}
type Point = PointX & {
y: number
}