接口(Interface)是一种用于定义对象结构的约定,它描述了对象应该具有的属性和方法。
以下是一个简单的示例,展示如何使用接口定义一个对象的结构:
interface Person {
// 不能多属性,也不能少属性
firstName: string;
lastName: string;
// age: number;
}
// 也可以写多个重名,属性相加
interface Person {
// 不能多属性,也不能少属性
age: number;
}
const person: Person = {
firstName: 'John',
lastName: 'Doe',
age: 30
};
在上面的示例中,我们定义了一个名为 Person
的接口,它包含了 firstName
、lastName
和 age
属性。然后,我们创建了一个符合该接口结构的 person
对象。
其他用法,实例如下:
interface xxx extends x {
name: string,
// readonly 修饰为只读,不可修改
readonly id:number,
// 索引签名,随便定义下面属性,它的值代表interface里面所有值,所以一般为 any
// propName 为 key string 类型,值为 any 类型
[propName: string]: any
}
// extends 用于接口继承
interface x {
xx:string
}
let a:xxx = {
name: 'xxx',
id: 1,
age: 18,
sex: '男',
xx: 'xxx'
}
type Animal = { name: string }
type Bear = Animal & { honey: boolean } // 交叉类型扩展
// 定义函数类型
interface Fn {
(a: number): number[]
}
const fn: Fn = (a) => {
return [1, 2, 3]
}
接口是一种声明的方式来定义类型,而 type 类型别名 是一种赋值的方式来定义类型。因此对象声明使用 interface 更多些。
区别:
- 声明对象时,interface 可以多次声明,会将重复的声明合并成一个,type 不可以,会报错或被覆盖,type 使用交叉类型(&)合并类型
- interface 支持继承
- interface 被类实现
- type 支持任何类型,interface 只支持 对象和函数签名
- interface 不支持联合、映射、条件类型,而 type 全面支持