Typesript的type和interface的异同?

详解TypeScript中type与interface的区别_javascript技巧_脚本之家

一、相同的地方

     1、都可以用来定义对象描述函数

我们在用typescript开发的时候经常要用到数据类型定义,比如我们写一个接口或者函数的时候定义传参数据类型及字段等。这样子方便知道这个接口可以传什么参数,什么类型,便于后续维护和开发。

(1)定义对象

(2)定义常量

      2、都具有可拓展性,都可以用来扩展其他类型

      a)使用interface可以定义一个对象的结构和属性,并且可以进行继承和实现

b)使用type可以定义一个已有类型的别名,也可以进行交叉和联合类型的组合

c)type还可以拓展其他类型,如基本类型、函数类型、数组类型

ID是一个类型别名,可以是字符串或数字类型。Greeting是一个函数类型,接受一个字符串参数并返回字符串类型。Coordinate是一个数组类型,包含两个数值类型的元素。User是一个对象类型,包含id、name、age等属性,并且属性的类型是通过type拓展得到的。

二、不同点

     1、type 可以定义基本类型、联合类型、交叉类型,还可以进行类型运算,而interface主要用来定义对象的结构。

     2、interface 可以被类实现(implement),而type不行。

我们定义了一个接口Animal,它有一个name属性、一个sound属性和一个speak方法。然后,我们创建了一个类Dog,它实现了Animal接口。类Dog通过实现Animal接口,必须实现接口中定义的所有属性和方法。在类Dog中,我们定义了一个name属性和一个sound属性,并实现了speak方法。最后,我们创建了一个Dog的实例myDog,并调用了speak方法来表达狗的声音

     3、interface 支持声明合并,而type不支持。在同一个作用域内,使用相同的名称定义多个interface,会自动合并成一个。

     例子如下:

         我们先定义了一个名为 Person 的 interface,包含 name 和 age 属性。然后,在同一个作用域内再次定义了一个名为 Person 的 interface,包含 gender 属性。这两个 interface 会自动合并成一个。

       合并后的 Person interface 的类型为 { name: string; age: number; gender: string; }。我们可以使用这个合并后的 interface 来声明一个变量 p,并给它赋值一个对象,对象符合合并后的类型定义。

       注意,合并只会发生在两个具有相同名称interface 定义之间,其他类型定义(如 type 和 class)之间是不会发生合并的。

     4、interface 更推荐用于描述对象的结构,type 更适用于创建类型别名。

     5、使用interface时,如果定义了同名的属性,会进行属性合并;而使用type时,如果定义了同名的属性,会报错。

    a) interface

      例子如下:接口A和B都定义了同名的属性name。当我们通过接口AB继承A和B时,会进行属性合并,最终合并后的接口AB将具有name、age、gender和nationality这些属性。

不过需要注意的是,如果在合并后的接口中,同名属性的类型不一致,TypeScript会报错

b) type(使用type时,如果定义了同名的属性,则会导致编译错误

 

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

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

相关文章

代码随想录day21 二叉树最后一天 || 669修剪二叉树 108将有序数组转变为平衡搜索二叉树 538把搜索二叉树变为累加二叉树

669修剪二叉树 力扣题目链接 题目描述: 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果…

K8s 核心组件——API Server

1. Kubernetes API Server 概述 1.1 基本概念 Kubernetes API Server(API Server)是 Kubernetes 的核心组件之一,负责暴露 Kubernetes API 给用户和客户端,接收和处理来自客户端的请求,并将其存储到 etcd 中。Kubern…

花几千上万学习Java,真没必要!(三十一)

集合: 1、数组的特性: 2、ArrayList(动态数组): 测试代码1: package listtest.com; import java.util.ArrayList; import java.util.List; public class HashCodesArrayList { public static void ma…

.NET MAUI:跨平台开发的未来

常用资源 (1).NET MAUI8构建应用文档。 Build your first .NET MAUI app - .NET MAUI | Microsoft Learn 一、什么是 .NET MAUI? .NET Multi-platform App UI (.NET MAUI) 是微软推出的一款跨平台开发框架。作为 Xamarin.Forms 的下一代产…

深入分析 Android ContentProvider (六)

文章目录 深入分析 Android ContentProvider (六)ContentProvider 的性能优化和实践案例(续)1. 性能优化技巧(续)1.6. 使用批量插入优化性能示例:批量插入实现 1.7. 使用 Projections 优化查询示例:使用 Pr…

本周热点丨快手《可灵》国际版正式上线、《王者荣耀》国际服海外下载量破5000万

7月第4周 秦彻带动《恋与深空》2.0霸榜全球 《蔚蓝档案》上线3.5周年庆典版本,登顶日服iOS畅销榜 《Honor of Kings》下载量突破五千万 英伟达将开发"Blackwell"的中国定制版芯片 人工智能初创公司Cohere获得5亿美元融资 Fal AI推出全新开源图像生成模型A…

reshape函数及MATLAB应用

reshape 函数在 MATLAB 中是一个非常有用的函数,通过重新排列现有元素来重构数组。它允许你重新调整数组(或矩阵)的尺寸,而不改变其数据。这个函数特别适用于当你需要将一个矩阵或数组从一种结构转换为另一种结构时,只…

Python 入门学习第三课

# 遍历列表 # 通常使用for循环 格式 for 自己定义的名字:列表: # 冒号不要忘记了 在这之后 需要缩进 如果不缩进 将进行一次 message [zahngsan,lisi,wangwu] for wq in message:print(wq) # 练习题 message [xiande,tiande,choude] for wq in message:print(wq) …

【GoodERP更新日志】发票管理 模块 增加 批量通知开票 功能结算单 增加 按凭证号查询、按是否生成凭证 查询 筛选

开源项目GoodERP更新-2024年7月28日 本次提交合并增加的功能或解决的问题: 1、结算单 增加 按凭证号查询、按是否生成凭证 查询 筛选 2、增加发票 批量通知开票 功能 3、修正发票号码为8或20位校验 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来…

AFSim 仿真系统--任务处理器入门指南

任务处理器 任务处理器(WSF_TASK_PROCESSOR)是一个WSF处理器,它提供了检查轨迹管理器中的数据(轨迹)并对其采取行动的能力。这些行动包括: *向下属分配任务 *激活或停用传感器或干扰器 *开火武器 *操纵平台…

Vue项目发布后浏览器缓存问题解决

1. 现象描述 每次Jenkins自动化发布Vue项目后&#xff0c;用户需要手动全部清理历史缓存数据才可以使用系统&#xff0c;用户体验非常不好 2. 解决方案 2.1 配置public/index.html 配置index.html, 在首页启动no-store禁止缓存 <meta http-equiv"pragram" co…

达梦数据库系列—35.DM常用SQL

目录 实例相关 用户权限 内存相关 表相关 分区表/索引 表空间 文件相关 数据文件 undo文件 Temp文件 在线日志 归档日志 备份还原 JOB相关 主备 DSC ASM 会话相关 锁相关 sql相关 执行计划 系统负载 实例相关 版本 select * from v$version; select id…

昇思MindSpore 应用学习-DCGAN生成漫画头像-CSDN

日期 心得 昇思MindSpore 应用学习-DCGAN生成漫画头像&#xff08;AI代码学习&#xff09; DCGAN生成漫画头像 在下面的教程中&#xff0c;我们将通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。在本教程中&#xff0c;使用的动…

vue2和el-input无法修改和写入,并且不报错

文章目录 一. 业务场景描述二. 原因分析三.解决方案3.1 方案一 原生标签&#xff08;不建议&#xff09;3.2 方案二 父子传递&#xff08;不建议&#xff09;3.3 方案三 vuex&#xff0c;pinia 状态传值&#xff08;不建议&#xff09;3.4 方案四 vue初始化属性 &#xff08;建…

Java从入门到精通(十三)~ 枚举和注解

晚上好&#xff0c;愿这深深的夜色给你带来安宁&#xff0c;让温馨的夜晚抚平你一天的疲惫&#xff0c;美好的梦想在这个寂静的夜晚悄悄成长。 文章目录 目录 前言 一、枚举 1.1 枚举的概念 ​编辑 1.2 枚举的特点 1.3 枚举的实际运用 1. 状态机&#xff0c;描述属性的…

Nginx配置详解

1. Nginx安装 进入到/usr/local目录下&#xff0c;执行命令&#xff1a; yum install -y nginx通过如下命令启动nginx服务 systemctl start nginx通过如下命令&#xff0c;设置nginx开启自启动 systemctl enable nginxnginx默认占用80端口。 访问ip:80&#xff0c;可以看到…

Open3D 点云按xyz轴等距切片

目录 一、概述 1.1原理 1.2实现步骤 1.3应用 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2按x轴切片 3.3按y轴切片 3.4按z轴切片 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff…

Java中线程池的基本使用

参考这个课程&#xff0c;讲的非常详细 27.线程池使用步骤总结_哔哩哔哩_bilibili 应用场景 商品秒杀 文件上传 订票系统 自定义线程池&#xff08;让我们了解底层逻辑的&#xff09; 构造方法 饱和机制 就是我们的队列饱和后我们该怎么处理 是拒绝这个任务还是啥…

Aria2 任意文件写入漏洞

目录 Aria2介绍漏洞描述漏洞复现 Aria2介绍 Aria2是一个在命令行下运行&#xff0c;多协议&#xff0c;多来源下载工具&#xff08;HTTP / HTTPS&#xff0c;FTP&#xff0c;BitTorrent&#xff0c;Metalink&#xff09;&#xff0c;内建XML-RPC用户界面。Aria提供RPC服务器&a…

流媒体服务器一:使用成熟的流媒体SRS 搭建 RTMP流媒体服务器

1 安装和测试srs流媒体服务器 服务器&#xff1a;SRS(Simple RTMP Server&#xff0c;⽀持RTMP、HTTP-FLV&#xff0c;HLS) 推流端&#xff1a;ffmpeg OBS 拉流端&#xff1a;ffplay VLC srs播放器 1.1 安装srs流媒体服务器 官网 SRS (Simple Realtime Server) | SRS 码…