当前位置: 首页 > news >正文

前端基础知识TypeScript 系列 - 04(TypeScript 中接口的理解)

一、是什么

接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法

简单来讲,一个接口所描述的是一个对象相关的属性和方法,但并不提供具体创建此对象实例的方法

typescript的核心功能之一就是对类型做检测,虽然这种检测方式是“鸭式辨型法”,而接口的作用就是为为这些类型命名和为你的代码或第三方代码定义一个约定

二、使用方式

接口定义如下:

interface interface_name {
}

例如有一个函数,这个函数接受一个 User 对象,然后返回这个 User 对象的 name 属性:

const getUserName = (user) => user.name

可以看到,参数需要有一个username属性,可以通过接口描述user参数的结构

interface User {name: stringage: number
}const getUserName = (user: User) => user.name

这些属性并不一定全部实现,上述传入的对象必须拥有nameage属性,否则typescript在编译阶段会报错

如果不想要age属性的话,这时候可以采用可选属性,如下表示:

interface User {name: stringage?: number
}

这时候age属性则可以是number类型或者undefined类型

有些时候,我们想要一个属性变成只读属性,在typescript只需要使用readonly声明,如下:

interface User {name: stringage?: numberreadonly isMale: boolean
}

当我们修改属性的时候,就会出现警告

这是属性中有一个函数,可以如下表示:

interface User {name: stringage?: numberreadonly isMale: booleansay: (words: string) => string
}

如果传递的对象不仅仅是上述的属性,这时候可以使用:

  • 类型推断
interface User {name: stringage: number
}const getUserName = (user: User) => user.name
getUserName({color: 'yellow'} as User)
  • 给接口添加字符串索引签名
interface User {name: stringage: number[propName: string]: any;
}

接口还能实现继承

也可以继承多个,父类通过逗号隔开,如下:

interface Father {color: String
}interface Mother {height: Number
}interface Son extends Father,Mother{name: stringage: Number
}

三、应用场景

例如在javascript中定义一个函数,用来获取用户的姓名和年龄:

const getUserInfo = function(user) {// ...return name: ${user.name}, age: ${user.age}
}

如果多人开发的都需要用到这个函数的时候,如果没有注释,则可能出现各种运行时的错误,这时候就可以使用接口定义参数变量:

// 先定义一个接口
interface IUser {name: string;age: number;
}const getUserInfo = (user: IUser): string => {return `name: ${user.name}, age: ${user.age}`;
};// 正确的调用
getUserInfo({name: "koala", age: 18});

包括后面讲到类的时候也会应用到接口

http://www.lryc.cn/news/587170.html

相关文章:

  • 深度学习图像分类数据集—角膜溃疡识别分类
  • php生成二维码
  • 人工智能之数学基础:神经网络的矩阵参数求导
  • ABP VNext + 多级缓存架构:本地 + Redis + CDN
  • Redis集群方案——哨兵机制
  • 前端工程化-构建打包
  • Java 8 异步编程和非阻塞操作工具 CompletableFuture
  • DVWA CSRF漏洞分析与利用
  • C语言---自定义类型(上)(结构体类型)
  • 更换docker工作目录
  • 4. 关于CEF3 使用的一些记录及仓颉端封装的情况
  • [2025CVPR]DenoiseCP-Net:恶劣天气下基于LiDAR的高效集体感知模型
  • Android事件分发机制完整总结
  • 《Python JSON 数据解析全指南:从基础到实战(含 jsonpath 与 Schema 验证)》
  • 002大模型基础知识
  • Opencv---blobFromImage
  • Llama系列:Llama1, Llama2,Llama3内容概述
  • 互联网大厂Java面试:从Spring Boot到微服务的场景应用
  • RHCIA第二次综合实验:OSPF
  • anaconda常用命令
  • 动态规划理论基础,LeetCode 509. 斐波那契数 LeetCode 70. 爬楼梯 LeetCode 746. 使用最小花费爬楼梯
  • 编译器优化——LLVM IR,零基础入门
  • 基础数论学习笔记
  • 每天学习一个Python第三方库之jieba库
  • vue中 js-cookie 用法
  • 深度学习算法:开启智能时代的钥匙
  • DVWA靶场通关笔记-XSS DOM(High级别)
  • 详解缓存淘汰策略:LFU
  • 初级网安作业笔记1
  • 3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?