Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >系统学习 TypeScript(六)——认识接口

系统学习 TypeScript(六)——认识接口

原创
作者头像
编程三昧
发布于 2022-03-05 10:59:20
发布于 2022-03-05 10:59:20
30600
代码可运行
举报
文章被收录于专栏:编程三昧编程三昧
运行总次数:0
代码可运行
TypeScript
TypeScript

前言

接口是我们在进行模块、方法等的封装时经常会用到的一个概念,使用接口可以:

  • 将一类具体事务抽象成单一的对象方法,使用者不必关心内部的实现逻辑,只需要按照要求传入对应的参数即可得到预期的结果输出,从很大程度上减轻了使用者的心智负担。
  • 一处定义,多处使用,减轻后续的维护负担。

TypeScript 也有接口的概念,它被用来校验数据类型是否符合要求。

image-20220305162730984
image-20220305162730984

TypeScript 接口就像是一份具有名称的契约或者规则,契约的内容规定了某个数据结构里面的数据组成和类型,只要有某处通过名称调用了这份契约,那就意味着此处的数据必须要接受并通过契约内容的检查,否则会报错。

JavaScript 代码示例

如果用 JavaScript,我们的代码可能是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function printInfo(info){
    console.log(info.name);
}
printInfo({name: "编程三昧"});
// 编程三昧
printInfo({age: 22});
// undefined
printInfo();
// Uncaught TypeError: Cannot read properties of undefined (reading 'name')

由于 JavaScript 没有静态类型检查机制,在代码真正运行前无法准确判断可能会出现的问题。经常在调用一个接口前,还需要研究一下这个接口相关的源码,这很不利于协同开发

我们迫切需要一种能够在方法调用时明确显示所需参数类型及格式的机制。

不使用接口的 TypeScript 代码示例

在学习 TypeScript 接口之前,我们的 TypeScript 代码可能是这样的:

代码语言:typescript
AI代码解释
复制
let personalInfo_1: { name: string; age: number } = {
    name: "编程三昧",
    age: 22
};

let personalInfo_2: { name: string; age: number } = {
    name: "隐逸王",
    age: 22
};

虽然达到了数据类型检查的目的,但是很明显,类型检查器 { name: string; age: number } 重复,造成了代码冗余。

为什么要用 TypeScript 接口?

上面两段代码暴露出两个问题:

  • 没有类型检查器的机制不利于协同开发;
  • 常规的 TypeScript 类型检查器写法容易造成代码冗余。

使用 TypeScript 接口就可以解决上述问题。比如:

代码语言:typescript
AI代码解释
复制
interface PersonalInfo {
    name: string;
    age: number;
}

function printPersonalInfo(info: PersonalInfo): void {
    console.log(info);
}

let personalInfo_1: PersonalInfo = {
    name: "编程三昧",
    age: 22
};

let personalInfo_2 = {
    name: "隐逸王",
    age: 22,
    gender: "Male"
}

let personalInfo_3 = {
    age: 22
}
printPersonalInfo(personalInfo_1);
// 编程三昧
printPersonalInfo(personalInfo_2);
// 隐逸王
printPersonalInfo(personalInfo_3);
// Error,具体报错信息如下图
image-20220305183140752
image-20220305183140752

可以看到,通过使用 TypeScript 接口,既实现了类型检查,又减少了重复指定类型检查器的冗余。

就像我们之前说的,TypeScript 接口就是一份约束数据类型的契约,谁都可以通过名称去使用它来约束自己的数据类型,这就实现了复用的效果。

存在的疑惑

在上面代码中,不知道大家有没有注意到一点比较怪异的地方:personalInfo_2 的数据类型并不符合 printPersonalInfo 方法中指定的数据类型,但是代码却没有报错。

关于这一点,不知道大家都是怎么理解的?

总结

本文主要介绍了为什么要用 TypeScript 接口的原因以及用接口的好处。接口就像是一份契约,内容规定了数据格式,任何变量都可通过接口名称使用接口进行类型检查。

并且还引出了一个疑惑点,大家可以就这个问题给出自己的见解,欢迎在评论区交流!

~

~ 本文完,感谢阅读!

~

学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
系统学习 TypeScript(四)——变量声明的初步学习
这里只是举个例子,稍微有点经验的人一眼就能判断出 arr3 是一个三维数组。但是,授人以鱼不如授人以渔,这个分析方法却适用于绝大多数复杂数据类型分析。
编程三昧
2022/02/25
3190
系统学习 TypeScript(四)——变量声明的初步学习
系统学习 TypeScript(二)——开发流程和语法规则
我们已经知道了 TypeScript 是什么,以及为什么要用 TypeScript,今天,我们就来学习怎么初步使用它。
编程三昧
2022/02/22
8710
系统学习 TypeScript(二)——开发流程和语法规则
系统学习 TypeScript(三)——基础类型
TypeScript 中的整形和浮点数类型都是 number,这点和 JavaScript 是一样的,比如:十进制、二进制、八进制和十六进制的类型都是 number。
编程三昧
2022/02/24
6600
系统学习 TypeScript(三)——基础类型
从 JavaScript 到 TypeScript
TypeScript 并不是一个完全新的语言, 它是 JavaScript 的超集,为 JavaScript 的生态增加了类型机制,并最终将代码编译为纯粹的 JavaScript 代码。 TypeScript 简介 TypeScript 由 Microsoft(算上 Angular 2 的话加上 Google)开发和维护的一种开源编程语言。 它支持 JavaScript 的所有语法和语义,同时通过作为 ECMAScript 的超集来提供一些额外的功能,如类型检测和更丰富的语法。下图显示了 TypeScrip
牧云云
2018/04/28
1.6K0
从 JavaScript 到 TypeScript
系统学习 TypeScript(五)——联合类型
在初步学习了 TypeScript 的变量声明后,对它的静态类型检查功能简直是爱不释手,但同时也发现一个问题:在正常的开发中,一个变量的类型有时可能不仅仅只限于 number 或者 string 中的一种,有可能是两种类型或者更多,比如:
编程三昧
2022/03/01
1.1K0
系统学习 TypeScript(五)——联合类型
使用 Chrome 调试 Vue3 的 TypeScript 源码
在 vue-next 目录下,使用终端执行 yarn run dev,得到如下输出:
编程三昧
2021/09/27
1K0
使用 Chrome 调试 Vue3 的 TypeScript 源码
快速了解typescript语法
一个保存字符串的文本,类型声明为 string。可以发现类型声明可大写也可小写,后文同理。
用户9914333
2022/07/21
9110
有同学问我:Fetch 和 Ajax 有什么区别?
自昨天发了《还在死磕 Ajax?那可就 out 了!》一文后,收到了一些大家的一些评论,评论都很走心,也很有深度。
编程三昧
2021/08/18
6300
有同学问我:Fetch 和 Ajax 有什么区别?
前端 JavaScript 之『节流』的简单代码实现
首先,总结一下上一篇文章——《前端 JavaScript 之『防抖』的简单代码实现》的内容:「防抖」就是在高频率触发事件停止触发后,延时执行某个处理逻辑。
编程三昧
2021/06/19
5300
前端 JavaScript 之『节流』的简单代码实现
前端 JavaScript 之『节流』的简单代码实现
首先,总结一下上一篇文章——《前端 JavaScript 之『防抖』的简单代码实现》的内容:「防抖」就是在高频率触发事件停止触发后,延时执行某个处理逻辑。
编程三昧
2021/06/19
4580
前端 JavaScript 之『节流』的简单代码实现
从 JavaScript 到 TypeScript
TypeScript 并不是一个完全新的语言, 它是 JavaScript 的超集,为 JavaScript 的生态增加了类型机制,并最终将代码编译为纯粹的 JavaScript 代码。
一个会写诗的程序员
2018/08/17
1.2K0
从 JavaScript 到 TypeScript
前端 JavaScript 中 JSON.stringify() 的基本用法
在开发工作中,我们可能会碰到这样的需求:需要将某个对象内容弹窗显示或者保存在文件中,这时候如果你直接弹窗的话,很可能就是下面这样的:[image-20210629184729132]
编程三昧
2021/06/29
9100
前端 JavaScript 中 JSON.stringify() 的基本用法
JavaScript 之 Proxy
Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。
编程三昧
2022/01/27
3390
JavaScript 之 Proxy
ES6 中的 Symbol 是什么?
记得刚找工作那会,几种数据类型是必问题,当时的答案一般都是七种——字符串(String)、数字(Number)、布尔(Boolean)、数组(Array)、对象(Object)、空(Null)、未定义(Undefined),时至今日,某些网络教程上还是这样的分类:
编程三昧
2021/06/24
8530
ES6 中的 Symbol 是什么?
你知道关闭页面时怎么向后台发送消息吗?
这两天碰到一个需求:在用户刷新页面或者关闭页面的时候,前端要给后台发一条请求,释放该页面的授权占用。
编程三昧
2021/08/16
1.1K0
你知道关闭页面时怎么向后台发送消息吗?
Typescript 类型与接口
在TypeScript中,type和interface都用于定义对象或类型的形状。它们在功能上看起来相似,但在使用方式和扩展方面有一些区别。
zayyo
2023/11/29
1930
工具库用久了,你还会原生操作 Cookie 吗?
前端技术的飞速发展,给从业人员不可避免地带来了“疲劳”感,我们常常会感叹学不动了。于是,为了给我们“减压”,各种工具库和框架们诞生了。
编程三昧
2021/08/28
2610
工具库用久了,你还会原生操作 Cookie 吗?
TS(typeScript)的学习笔记
Object object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。
拿我格子衫来
2022/01/24
4330
Web Components 系列(十一)—— 实现 MyCard 的可复用
在上一节中,使用 Templates 实现了 MyCard 的基本布局,并且在文章结尾我也说过,因为不可复用,其实用性基本为零。
编程三昧
2022/02/18
4320
Web Components 系列(十一)—— 实现 MyCard 的可复用
Docker 系列 _ 01_ 一念缘起
在生产环境配置日益复杂的今天,一套统一的、可移植的环境可能是很多从业人员梦寐以求的。所谓“需求引领市场”,在需求的催动下,解决方案的诞生也只是时间问题而已。
编程三昧
2021/08/27
2520
Docker 系列 _ 01_ 一念缘起
相关推荐
系统学习 TypeScript(四)——变量声明的初步学习
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验