本文详细解析TypeScript中interface接口的核心用法,涵盖对象类型、函数类型、类实现及混合类型接口。通过Vue3示例展示确定、可选、只读及任意属性的定义,讲解函数签名规范,并说明类如何通过implements满足接口契约,帮助开发者构建类型安全的代码协作规范。
一、interface的基本含义
TypeScript引入了一项关键特性:接口(interface),主要用于定义对象类型和函数类型。
接口用于约束对象、函数以及类的结构与类型,它是代码协作中必须遵循的契约规范。
Interface本质上是描述对象或函数形态的工具。可以将其视为一种“形状”定义:规定对象应具备哪些属性、函数需要接收何种参数或返回何种值、数组的结构如何,以及类及其继承类需符合的描述标准。下文将具体展开讲解对象类型接口、函数类型接口以及混合类型接口。
二、对象类型接口
在接口定义中,可以包含以下类型的属性:
包括确定属性、可选属性、只读属性,以及任意属性(可通过 as 断言或 [propName: string]: any 语法来指定允许接收的其他额外属性)。
以下示例基于Vue3环境实现:
interface Person {
age: number,// 确定属性
name?: string,// 可选属性(加问号即可)
[propName: string]: any,// 任意属性
readonly sex: string,// 只读属性
}
// 使用接口
const p = ref<Person>({
age: 20,// 确定属性,不写会报错
sex: '女',// 只读属性也是确定属性,不写会报错
label1: '班花',// 任意属性1
label2: '165',// 任意属性2
})三、函数类型接口
Interface同样可用于规范函数的形态。在接口内部需列出参数列表及返回值类型的函数定义,具体写法如下:
- 定义了一个函数接口
- 该接口接收三个参数,且不返回任何值
- 使用函数表达式来定义符合该形状的函数
// 函数类型接口
interface Func {
// 定于这个函数接收两个必选参数都是 number 类型,以及一个可选的字符串参数 desc,
// 这个函数不返回任何值
(x: number, y: number, desc?: string): number
}
// 使用
const sum: Func = function (x, y, desc = '') {
// 等价于const sum: Func = function (x: number, y: number, desc: string): void {
console.log(desc, x + y)
}
console.log(sum(1, 2))四、类 interface
Interface也可用于定义类的形态。需注意,类接口仅检查实例属性,若需约束静态属性,则需额外定义一个独立的Interface。
在定义类时,可以使类通过implements关键字实现一个接口。
实现接口的过程,即确保类满足接口所规定的要求。
// 接口继承接口:继承一个新的接口或者类,从父类或者接口继承所有的属性和方法
// 不可以重写属性,但可以重写方法
interface classPerson extends Person1 {
//在继承的基础上新找了个了一个teach方法,且返回值是string类型
teach(): string;
}
// 类实现接口implements:实现一个新的类,从父类活接口实现所有的属性和方法,
// 同时可以重写属性和方法,包含一些新的功能
class classPerson2 implements Person1 {
age = 20
name = 'suosuo'
sex = '女'
say() {
return '我的全名是小锁'
}
}五、混合类型的 Interface
混合类型接口是指使用同一个Interface同时描述函数调用签名以及对象的属性或方法。
// 混合类型接口
interface MixType {
// 如果只有这么一个,那么这个接口是函数接口
(x: number, y: number): number,
// 还含有其他方法,那么这个接口就是混合接口
add(x: number, y: number): number,
// 还有另一个方法
log(): void,
(): void
}
// 调用
function sum() {
let sum: MixType = (() => { }) as MixType;
sum.add = (x: number, y: number) => { return x + y }
sum.log = () => { }
}
const isShowModal = ref(false)
function open() {
isShowModal.value = true
}六、总结
- 接口用于定义类结构,明确类中应包含的属性和方法;同时,接口也可作为类型声明直接使用。
- 接口中的所有属性均不能赋予实际初始值。
- 接口仅定义对象的结构,而不涉及具体的实际值。
- 在接口中,所有的方法均被视为抽象方法。
到此这篇关于Typescript学习之接口interface的文章就介绍到这了,更多相关Typescript接口interface内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!