类型别名
所有的类型都可以用类型别名表示
语法:type typeName = typeValue
// 给联合类型重新命名
type NS = number | string;
// 创建一个新的对象类型
type Person = { name: string, age: number };
接口
接口只能用来命名对象类型
语法:interface typeName {}
声明普通对象类型
interface Animal {
age: number;
}
声明函数类型
interface Fn {
(name: string): string;
}
let fn: Fn = function (name: string): string {
return name;
}
类型别名和接口的区别
- 接口可以声明同一名称的类型,但类型别名不能
- 接口在声明同一名称的类型时,会发生类型合并,但类型别名不能
- 接口针对的是对象类型的声明,而类型别名支持所有类型的声明
- 接口可以被继承,而类型别名无法被继承
// 接口可以声明同一名称的类型,但类型别名不能
// 接口在声明同一名称的类型时,会发生类型合并,但类型别名不能
interface Animal {
name: string;
}
interface Animal {
age: number;
}
let dog: Animal = {
name: "dog",
age: 10
}
type Dog = {
name: string;
}
type Dog = {
name: string;
} // Error: Duplicate identifier 'Dog'.
// 接口可以被继承,而类型别名无法被继承
interface Pen {
name: string;
}
interface Pencil extends Pen {
color: string;
}