TypeScript中定义类型的两种方式
- 1、接口(interface):只能约束对象类型
- 2、类型别名(type alias):以声明的方式来定义组合类型,交叉类型,原始类型
相同点
interface User{
name: string
age: number
}
interface SetUser{
(name: string, age: number):void
}
type User = {
name: string
age: number
}
type SetUser = (name: string, age: number):void
2、都允许扩展(extends)
interface和type都可以拓展,并且两者并不是互相独立的,也就是说interface可以extends type, type也可以extends interface. 虽然效果差不多,但是语法不同。
interface Name{
name: string
}
interface Users extends Name{
age: number
}
type Name = {name: string}
type User = Name & {age: number}
type Name = {name: string}
interface User extends Name{age: number}
interface Name{name: string}
type User = Name & {age: number}
不同点
1、 type声明基本类型别名、联合类型、元祖等类型
// 基本类型别名
type Name = string
// 联合类型
interface Dog {
wong()
}
interface Cat {
miao()
}
type Pet = Dog | Cat
// 具体定义数组每个位置的类型
type PetList = [Dog, Pet]
2、 type语句中还可以使用typeof获取实例的类型进行赋值
// 当你想要获取一个变量的类型时,使用typeof
let div = document.createElement('div')
type B = typeof div
interface User {
name: string;
age: number;
}
interface User {
sex: string;
}
{
name: string;
age: number;
sex: string;
}