TypeScript中type和interface区别

news2024/9/27 17:27:54

typescript中interface介绍:TypeScript 中的接口 interface_疆~的博客-CSDN博客通常使用接口(Interface)来定义对象的类型。https://blog.csdn.net/qq_40323256/article/details/128478749

type

type关键字是声明类型别名的关键字。用来给一个类型起新名字,使用 type 创建类型别名。类型别名不仅可以用来表示基本类型,还可以用来表示对象类型、联合类型、元组和交集。它的语法如下:

type AliasName = Type;
  • type:声明类型别名的关键字
  • AliasName:类型别名的名称
  • Type:类型别名关联的具体类型

 

type MyNumber = number //基本类型
type StringOrNumber = string | number //联合类型
type Text1 = string | string[] //联合类型
type Point = [number, string] //元组
type Callback = (data: string) => void //函数类型
// 对象类型
type Person = {
  age: number;
  gender: string;
  isWebDev: boolean;

  id: MyNumber; // 可以使用定义类型
  name: StringOrNumber;
};
// 范型
type Tree<T> = { value: T };

 多个type情况:

type TPerson1 = {
  name: string
}
type TPerson2 = {
  age: number
}
type TPerson = TPerson1 & TPerson2

let u: TPerson = { name: '张三', age: 23 }

 

相同点

都可以用来定义 对象 或者 函数 的结构,而严谨的来说,type 是引用,而 interface是定义 

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

type:

type TPosition = {
  x: number;
  y: number;
};

type TSetPosition = (x: number, y: number) => void;

 interface:

interface IPosition {
  x: number;
  y: number;
}

interface ISetPosition {
  (x: number, y: number): void;
}

 2、都可以实现继承

type 可以继承 interface,interface也可以继承type,只是在实现形式上,稍微有些区别。

对于 interface 来说,继承是通过 extends 实现的;而 type 是通过 & 来实现的,也可以叫做交叉类型。 

type:

// type 继承 type
type TPerson = {
  name: string
}

type Student = TPerson & { stuId: number }

// type 继承 interface
interface IPerson {
  name: string
}

type Student2 = IPerson & { stuId: number }

 interface:

// interface 继承 interface
interface IPerson {
  name: string
}

interface IStudent extends IPerson { stuId: number }

// interface 继承 type
type TPerson = {
  name: string
}

interface IStudent extends TPerson { stuId: number }

 不同点:

  • type 在声明类型别名之后实际上是一个赋值操作,它需要将别名与类型关联起来。也就是说类型别名不会创建出一种新的类型,它只是给已有类型命名并直接进行引用。interface定义了一个接口类型。
  • type 能够表示非对象类型, 而 interface 则只能表示对象类型

 

1、type 可以做到而 interface 不能做到

type 可以声明基本类型、联合类型、元组类型

type MyNumber = number //基本类型
type StringOrNumber = string | number //联合类型
type Text1 = string | string[] //联合类型
type Point = [number, string] //元组

2、interface 可以做到而 type 不能做到

interface 可以声明合并。而 type 的话,就会报重复定义的警告,因此type是无法实现声明合并

// interface 可以声明合并
interface IPerson {
  name: string
}
interface IPerson {
  age: number
}
let p: IPerson = { name: '张三', age: 23 }

// type 不可以声明合并
type TPerson = {
  name: string
}
type TPerson = {
  age: number
}
let u: TPerson = { name: '张三', age: 23 }

 

 

 总结

对于 type来说,更多的是对类型的一种复用,比如在项目中需要用到一些比较复杂的或者书写起来很长的类型,我们可以使用 type来直接引用该类型:

type FType = boolean | string | number;

而对于 interface来说,它是正儿八经的用来定义接口类型(约束数类型和属性)的,且接口类型是支持继承和声明合并的。

所以在对于对象结构的类型定义上,建议尽可能的使用 interface,而在合适的场景使用 type
一些使用场景
1、使用type的场景:

  • 定义基本类型的别名时,使用 type
  • 定义元组类型时,使用 type
  • 定义函数类型时,使用 type
  • 定义联合类型时,使用 type
  • 定义映射类型时,使用 type

2、使用interface的场景:

  • 需要利用接口自定合并特性的时候,使用 interface
  • 定义对象类型且无需使用 type 的时候,使用 interface
     

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

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

相关文章

windows 编译C++ boost库(超详细)

系列文章目录 文章目录系列文章目录前言一、windows二、b2.exe 参数前言 boost库其实不进行编译&#xff0c;大部分库也是可以正常使用的 而且也有一个开源工具vcpkg可以帮组我们下载编译&#xff0c;只是在国内用起来比较麻烦&#xff0c;而且还时常出bug 所以这里详细记录…

mac下,使用 docker 搭建,单机机器集群

背景&#xff1a; 在 Mac本下&#xff0c;通过 docker 完成一个 es 集群&#xff08;3台-或许可多台&#xff09;搭建。&#xff08;后续如果有真实的机器&#xff0c;只需要又该对应的 ip 地址即可&#xff0c;需要关注的是&#xff0c;机器间是可以互相 ping通的&#xff0c;…

4.3.5、IPv4 地址的应用规划

给定一个 IPv4 地址块&#xff0c;如何将其划分成几个更小的地址块&#xff0c;并将这些地址快分配给互联网中的不同网络&#xff0c; 进而可以给各网络中的主机和路由器接口分配 IPv4 地址。 一般有两种方法&#xff1a; 定长的子网掩码 FLSM &#xff08;Fixed Length Sub…

线程,进程以及Java中创建线程的多种方式

1. 前言 今天的这篇文章的目的还是为了讲述下什么叫线程&#xff0c;什么是进程。可能之前很多人都是通过背书得来的&#xff0c;今天就从通俗易懂的角度来分析下 2. 适合人群 线程以及进程的初学者 3. 开始 3.1 什么是程序 其实不管是程序/ 进程/ 线程都是基于操作系统而言…

141.环形链表

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;…

SuperMap iDesktop地质体模型匹配地形——精修地质体模型路线

作者&#xff1a;超图研究院技术支持中心-于丁 地质体模型匹配地形——精修地质体模型路线 相信大家开展地质体业务时&#xff0c;常常会遇到构建的精模地质体与DEM地形数据的交界面&#xff0c;嵌合效果不佳、相互压盖、渲染冲突不稳定&#xff08;闪面&#xff09;、掩盖、漂…

前端期末考试试题及参考答案(03)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 一、 填空题 transition属性中______规定应用过渡的CSS属性的名称。transition属性中______定义过渡效果花费的时间。transition属性中______属性规定过渡效果的时间曲线。…

GitHub入门指南(上)

前言 我去年入门 GitHub&#xff0c;一开始不知道从哪开始学&#xff0c;在网上查找了很多文章、教程学习。这篇文章就是以我刚学习时的小白视角写的&#xff0c;希望能帮助到想开始学习 GitHub 又不知如何上手的学习者。因为我也是初级水平&#xff0c;文中介绍的知识基于我自…

6.移动端布局-rem布局

1.rem基础 优点&#xff1a;可以通过修改html里边文字的大小来改变页面中其他元素的大小&#xff0c;可以实现整体控制 1.1 rem单位 rem(root em)是一个相对单位&#xff0c;类似于em。 em是相对于自身元素字体大小&#xff08;若自身没有设置font-size则基础父元素的字体大…

一次SQL调优 聊一聊 SQLSERVER 数据页

一&#xff1a;背景 1.讲故事 最近给一位朋友做 SQL 慢语句 优化&#xff0c;花了些时间调优&#xff0c;遗憾的是 SQLSERVER 非源码公开&#xff0c;玩起来不是那么顺利&#xff0c;不过从这次经历中我觉得明年的一个重大任务就是好好研究一下它&#xff0c;争取在 SQLSERVE…

uniapp实现音频播放抢占系统音频焦点

项目为使用uniapp框架开发的Android/iOS APP应用 实现功能需求 假设手机正在播放音乐&#xff0c;当前APP处于前台收到消息&#xff0c;需播放提示音提示用户。目标为降低后台正在播放音乐的音量&#xff0c;播放提示音&#xff0c;播放完毕后恢复后台音乐音量 需求分析 乍…

拉伯证券|新能源汽车前11月产销翻倍,渗透率升至三分之一

2022年11月&#xff0c;国内新能源轿车渗透率已升至33.8%&#xff0c;创前史新高。 2022年的最终一个交易日早盘&#xff0c;两市高开高走&#xff0c;沪指涨0.61%&#xff0c;深证成指涨0.35%&#xff0c;创业板指涨0.3%。板块上来看&#xff0c;Web3.0、虚拟人、网络游戏概念…

BI技巧丨RankxYoY

群友&#xff1a;PowerBI可以实现两年的排名差异么&#xff1f; 白茶&#xff1a;可以&#xff01;安排&#xff01; 本期的问题&#xff0c;来自于群内小伙伴的一个实际应用场景。在实际业务中&#xff0c;这个需求属于常见类型&#xff0c;展示当前排名时&#xff0c;用户关注…

【软件测试】 测试开发?看看一线大厂需求的测试开发技能......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 能在一线大厂工作是…

FPGA知识汇集-FPGA系统时序理论

时序约束条件 下面来具体讨论一下系统时序需要满足的一些基本条件。我们仍然以下图的结构为例&#xff0c;并可以据此画出相应的时序分析示意图。 在上面的时序图中&#xff0c;存在两个时序环&#xff0c;我们称实线的环为建立时间环&#xff0c;而虚线的环我们称之为保持时间…

Java死锁

一.死锁是什么&#xff1f; 死锁指两个或者两个以上的线程在执行过程中&#xff0c;去争夺同样一个共享资源&#xff0c;造成的相互等待的现象&#xff0c;如果没有外部干预&#xff0c;线程会一直阻塞&#xff0c;无法往下执行&#xff0c;这样一直处于相互等待资源的线程叫做…

极米Z6X Pro怎么样?极米Z6X Pro亮度如何?极米Z6X Pro值得入手吗?

投影仪不知怎么选&#xff1f;不妨看看极米Z6X Pro&#xff0c;半山黛青的全新配色下&#xff0c;是仅有5.3cm的轻薄机身&#xff0c;1.4kg的重量&#xff0c;一只手就可以轻松拿取。相比同价位的投影产品&#xff0c;极米Z6X Pro摆放方便又不占地&#xff0c;外观时尚精致&…

Go Map

Go Map map 是一种key-value的键值对存储结构&#xff0c;其中key不能重复&#xff0c;无序。底层是hmap结构&#xff0c;hmap中维护buckets(bmap结构)。结构定义 type hmap struct {count int // 元素个数B uint8 // buckets已扩容的次数&#xff0c;buckets长…

JVM-Java内存区域

1、运行时数据区域 运行时数据区域&#xff1a;程序计数器、Java虚拟机栈、本地方法栈、堆、方法区。 非运行时数据区域&#xff1a;直接内存。 &#xff08;1&#xff09;程序计数器 字节码解释器通过改变程序计数器来依次读取指令&#xff0c;从而实现代码的流程控制。在多线…

谷歌2022年最受欢迎Chrome浏览器扩展程序:包含Tango,Compose AI等

根据截图排序从左到右依次介绍如下&#xff1a; RoPro&#xff1a;Roblox.com网站体验增加了许多有用且独特的功能&#xff1b; MyBib&#xff1a;自动创建 APA 样式、MLA 格式和哈佛引用样式引文&#xff1b; eJOY English&#xff1a;翻译自Netflix, Youtube, iFlix上的字…