interface 原来是这样用的呀 ?typescript入门指南05(持续更新中)

news2024/11/14 3:48:13

大家好,我是王天~

这篇文章是 ts入门指南系列中第5篇,主要讲解ts中的interface接口应用,接口在ts中是比较重要的功能、兼顾类型的约束和拓展

ts 入门指南系列

  1.  Ts vs Js 谁适合前端开发? | TypeScript 入门指南 01
  2. 详解 tsconfig.json配置文件 | TypeScript 入门指南 02
  3. 必学!TypeScript语法类型基础 | TypeScript 入门指南 03
  4. 终于搞懂TS中的泛型啦! | typescript 入门指南 04-

1、介绍

TypeScript中的接口(Interface)用于定义对象的结构和类型。接口类似于制定一份合同或规范,描述了对象应该具有的属性、方法等特征,但并不提供具体的实现。

2、接口初探

接口定义了对象应该具备的属性和方法。例如,我们可以定义一个Person接口来描述一个人的基本信息:

interface Person {
  name: string;
  age: number;
}

示例代码:

let person: Person = {
  name: "Alice",
  age: 25
};

3、可选属性

接口的属性可以是可选的,即在对象中可以存在也可以不存在。使用?来标记可选属性。例如,我们可以将年龄属性改为可选:

interface Person {
  name: string;
  age?: number;
}

示例代码:

let person1: Person = {
  name: "Alice"
};

let person2: Person = {
  name: "Bob",
  age: 30
};

4、只读属性

接口的属性可以设置为只读,即在对象创建后不可修改。使用readonly关键字来标记只读属性。例如,我们可以将姓名属性设置为只读:

interface Person {
  readonly name: string;
  age?: number;
}

示例代码:

let person: Person = {
  name: "Alice",
  age: 25
};

person.name = "Bob"; // 错误,只读属性不可修改

5、额外的检查属性

当我们将一个对象赋值给接口类型的变量时,TypeScript会对该对象进行额外的检查,确保对象中没有未定义的属性。如果我们确实需要将额外的属性赋给对象,可以使用索引签名。例如:

interface Person {
  name: string;
  age?: number;
  [propName: string]: any;
}

示例代码:

let person: Person = {
  name: "Alice",
  age: 25,
  gender: "female" // 额外的属性,使用索引签名允许赋值
};

6、函数类型

接口不仅可以描述对象的结构,还可以描述函数的类型。例如,我们可以定义一个接口来描述一个求和函数:

interface Calculator {
  (a: number, b: number): number;
}

示例代码:

let add: Calculator = function(a, b) {
  return a + b;
};

7、可索引的类型

接口可以描述具有索引签名的对象,例如数组或字典。索引签名允许我们使用不同的索引类型来访问对象的属性。例如,我们可以定义一个字符串数组的接口:

interface StringArray {
  [index: number]: string;
}

示例代码:

let colors: StringArray = ["red", "green", "blue"];
let color: string = colors[0];

8、类类型

接口可以用来描述类的结构和实现,类可以实现(implement)接口并满足接口的要求。例如,我们可以定义一个接口描述一个时钟类:

interface Clock {
  currentTime: Date;
  setTime(date: Date): void;
}

class DigitalClock implements Clock {
  currentTime: Date;

  constructor(date: Date) {
    this.currentTime = date;
  }

  setTime(date: Date) {
    this.currentTime = date;
  }
}

class AnalogClock implements Clock {
  currentTime: Date;

  constructor(date: Date) {
    this.currentTime = date;
  }

  setTime(date: Date) {
    this.currentTime = date;
  }
}

示例代码:

let digitalClock = new DigitalClock(new Date());
let analogClock = new AnalogClock(new Date());

9、继承接口:

接口可以继承其他接口,从而组合多个接口的特性。继承可以帮助我们更好地组织和重用代码。例如:

interface Shape {
  color: string;
}

interface Square extends Shape {
  sideLength: number;
}

示例代码:

let square: Square = {
  color: "red",
  sideLength: 10
};

10、混合类型

接口可以描述具有多种类型的对象,这些对象可以同时具备函数、属性等特征。这样的接口被称为混合类型接口。例如,我们可以定义一个具有倒计时功能和属性的接口:

interface Counter {
  (): void;
  count: number;
}

示例代码:

function createCounter(): Counter {
  let count = 0;
  const counter = () => {
    count++;
    console.log("Count: ", count);
  };
  counter.count = count;
  return counter;
}

let counter = createCounter();
counter(); // 输出:Count: 1
counter(); // 输出:Count: 2
console.log(counter.count); // 输出:2

11、接口继承类:

接口可以继承类的成员,但不继承其实现。这样可以使用接口来约束类的结构,使其他类可以通过实现该接口来满足特定的要求。例如:

class Control {
  private state: any;
}

interface SelectableControl extends Control {
  select(): void;
}

示例代码:

class Button extends Control implements SelectableControl {
  select() {
    console.log("Button selected.");
  }
}

总之,接口在TypeScript中起到了约束和规范的作用,使代码更加可靠、可维护。通过使用接口,我们可以明确定义对象的结构、类的实现以及函数的类型,从而提高代码的可读性和可靠性。

总结

type vs interface

type 和 interface的都有定义类型的功能,但是声明类型和继承方面是有所区分的,使用时,需根据业务场景进行区分

  1. 声明类型

    • type可以表示非对象类型(字符串、numebr、、、)

    • interface 只能表示 对象类型(包括数组、函数等)

  2. 继承

  • type 不支持继承

  • interface 可以继承其他类型 、 interface type class

如果喜欢或者 有所启发,欢迎 star,对作者也是一种鼓励。


TypeScript 入门指南 (持续更新中🔥🔥🔥)

期待你的三连(点赞+收藏+关注)是我最大更新动力哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2122038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AIGC】InstructPixPix:基于文本引导的图像编辑技术

github:diffusers/examples/instruct_pix2pix/train_instruct_pix2pix_sdxl.py at main huggingface/diffusers GitHub 论文:https://arxiv.org/pdf/2211.09800 摘要 我们提出了一种从人类指令编辑图像的方法:给定一个输入图像和告诉模型做什么的书面…

往年互联网大厂腾讯华为百度等校招面试笔试题合集

踏入互联网巨头的第一步,从征服这份笔试真题集开始!小编搜集了多家顶尖互联网企业的历年校招面试笔试题,从基础扎实的数据结构与算法,到考验创新能力的产品设计案例,再到紧跟时代脉搏的前沿科技问答,全方位…

【笔记】扩散模型(七):Latent Diffusion Models(Stable Diffusion)论文解读与代码实现

论文链接:High-Resolution Image Synthesis with Latent Diffusion Models 官方实现:CompVis/latent-diffusion、CompVis/stable-diffusion 这一篇文章的内容是 Latent Diffusion Models(LDM),也就是大名鼎鼎的 Stable…

HarmonyOS开发之Swiper的使用(跳转到指定索引的方法)

一,效果图 class MyDataSource implements IDataSource {private list: number[] []private listener: DataChangeListenerconstructor(list: number[]) {this.list list}totalCount(): number {return this.list.length}getData(index: number): any {return thi…

svg图标的使用

图片的格式有很多,前端经常使用的有以下类型:jpg,jpeg,png,gif,svg,这篇文章将简单svg的情况,以及项目中如何使用和配置svg图标 目录 什么是svg图标 SVG图标的优缺点 优点 缺点 svg前端使用场景 SVG在代码中的使用 简单使用创建svg 作为图标引入…

注册网站怎么注册

网站注册成为我们日常生活中不可或缺的一部分。无论是社交媒体、电子商务平台还是各种在线服务,注册都是参与这些平台的第一步。下面将为您详细介绍一般网站注册的步骤,帮助您轻松完成注册过程。 1. 选择合适的网站 在注册之前,首先要确定您…

使用kubeadm部署k8s集群

1、简介 K8s部署主要有两种方式: 1、Kubeadm Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 2、二进制 从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集…

通过 汇编 分析 结构体

不使用结构体的情况, 网上的资料: 使用结构体的情况 总结 ; 使用 结构体之后, 会节省汇编的 ldr 指令, 结构体 就直接使用 偏移量 来 对变量进行赋值了。 注意 : 这里 结构体 依然是一个全局变量。

CentOS7 安装配置Maven

一、Maven介绍 Apache Maven 是一个 Java 项目的构建自动化工具,主要用于构建、依赖管理和项目信息管理。Maven 使用一种称为“生命周期”(Lifecycle)的概念来管理构建过程的不同阶段,例如编译源代码、运行测试、打包、部署等。这…

ubuntu使用命令行查看硬件信息

ubuntu使用命令行查看硬件信息 CPU cat /proc/cpuinfo其中,model name就显示了cpu的型号,cpu cores显示cpu的所有物理核心数量。 内存 cat /proc/meminfo其中,MemTotal就显示总内存大小,这里为32GB内存,SwapTotal显…

走近张大鹏教授:哈工大走出的中国第一位人工智能博士

写在最前 张大鹏,加拿大皇家科学院院士,加拿大工程院院士,国际电气与电子工程师协会终身会士(IEEE Fellow),国际模式识别协会会士,亚太人工智能学会会士,香港中文大学(深…

速通GPT-3:Language Models are Few-Shot Learners全文解读

文章目录 论文实验总览1. 任务设置与测试策略2. 任务类别3. 关键实验结果4. 数据污染与实验局限性5. 总结与贡献 Abstract1. 概括2. 具体分析3. 摘要全文翻译4. 为什么不需要梯度更新或微调⭐ Introduction1. 概括2. 具体分析3. 进一步分析 Approach1. 概括2. 具体分析3. 进一步…

批发订货系统源码怎么弄 门店订货系统小程序价格

上线批发订货系统可以显著提升业务效率和管理水平,它能够帮助企业自动化处理订单、实时跟踪库存、简化订单管理、生成数据报表…这些优势能最终帮助你降低成本、提高效率,提升业务竞争力。今天,小编为您分享批发订货系统源码怎么弄。大家点赞…

自带线充电宝哪个牌子质量好性价比高?口碑最好自带线充电宝

在如今这个快节奏的时代,手机等电子设备已经成为我们生活中不可或缺的一部分。然而,电量不足的困扰时常让我们陷入尴尬境地。自带线充电宝的出现,无疑为我们解决了这一难题。它不仅方便携带,无需再额外携带充电线,而且…

新手入行项目管理,需掌握六大核心技能

对于新手而言,学习项目管理的核心技能对于确保项目目标的明确性、资源的有效利用、团队协作的顺畅性、风险的有效控制,以及按时按质完成任务至关重要。项目管理对组织成功至关重要,它提高资源配置效率,促进创新,确保项…

一个请求入参 req 引发的魔法攻击

项目场景 月初检修上线后没几天,隔壁项目组的同事,反馈说出现了生产问题,调用我们这边的接口报错。 问题描述 看到这个问题的第一眼,什么鬼,请求参数错误? 但是看到 “操作用户信息为空” 这个提示的时候…

MySQL系列—10.Innodb行格式

我们平时的数据以行为单位来想表中插入数据,这些记录在磁盘上的存放方式也被称为行格式或者记录格式。InnoDB存储引擎设计了 4 种不同类型的行格式,分别是Compact、Redundant、Dynamic 和 Compressed行格式 查看MySQL8的默认行格式: SELECT…

STM32 HAL freertos零基础(四) 二值信号量

1、二值信号量 FreeRTOS中的二值信号量是一种用于任务间同步的机制,它只能有两个状态:0 或 1。二值信号量通常用来表示某个事件是否发生,比如硬件中断发生时设置信号量为1,表示事件已发生;而任务在需要等待该事件发生时…

Jupyter Notebook远程登录配置

目录 一、之前的版本修改方法 1、生成配置文件 2、设置密码、获取秘钥 3、修改默认配置文件 注:自动化脚本 二、新版本 注:自动化脚本 三、访问 四、ip查询 1、win 2、linux 一、之前的版本修改方法 1、生成配置文件 jupyter notebook --ge…

选对crm管理系统软件,客户留存率提升70%不是梦!

本文将盘点10款行业领先的crm管理系统软件,为企业选型提供参考! CRM系统,全称Customer Relationship Management System,即客户关系管理系统,是企业用来管理和分析客户互动与数据的软件系统。CRM系统的核心在于“以客户…