typescript中type和interface有什么区别,如何选择?

定义:

interface Users {name: string;age: number;getName: () => string;
}
type UsersType = {name: string;age: number;getName: () => string;
}

使用:

const user: Users = {name: '张三',age: 18,getName() {return this.name}
}class Person implements Users {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}getName() {return this.name}
}
class Person2 implements UsersType {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}getName() {return this.name}
}

相同点

  • 都可以描述一个对象结构
  • 都可以被class实现
  • 都可以被扩展

// type 基础类型,interface不行
type name = string
type list = Array<number>
// type 联合类型 交叉类型, interface不行,但是可以参与
type info = string | number // 联合类型type T1 = { name: string }
type T2 = { age: number }
type T3 = T1 | T2 // 联合类型
const a:T3 = { name: '张三' }
// interface可以参与联合和交叉类型
interface T4 {tall: number
}
type T5 = T1 | T4 
type T6 = T1 & T4 // 交叉类型
const b:T5 = { name: '张三'}
const c:T6 = { name: '张三', tall: 180}type T7 = typeof a // 获取a的类型 T3// keyof
type K1 = keyof T3 // 'name' | 'age'

不同点

  • type可以声明基础类型
  • type可以使用联合类型和交叉类型
  • type可以使用typeof赋值

  • 初衷:type定义类型关系,interface定义数据结构
  • 但实际时,很多时候会模糊不清,没有明确的界限
  • 建议:优先使用interface,再使用type(简单明了)

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

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

相关文章

Python基础知识—一文了解numpy

目录 导入和使用 多维数组 多维数组的基本操作 数组的算数运算 数组的自身运算 随机数组 导入和使用 安装完成后&#xff0c;可以在Python中使用以下代码来验证NumPy是否已经正确安装&#xff1a; import numpy as np a np.array([1, 2, 3])print(a) 多维数组 ⚪️ …

【22】Android高级知识之Window(三) -WMS

一、概述 这次开始到了WindowManagerService&#xff08;WMS&#xff09;&#xff0c;你可以把它看做一个WindowManager&#xff0c;只不过呢&#xff0c;属于系统服务进程&#xff08;system_server&#xff09;中的一员&#xff0c;和应用不在同一进程&#xff0c;所以涉及了…

CSS(二)——CSS 背景

CSS 背景 CSS 背景属性用于定义HTML元素的背景。 CSS 背景属性 Property描述background简写属性&#xff0c;作用是将背景属性设置在一个声明中。background-attachment背景图像是否固定或者随着页面的其余部分滚动。background-color设置元素的背景颜色。background-image把…

C# 设计模式分类

栏目总目录 1. 创建型模式&#xff08;Creational Patterns&#xff09; 创建型模式主要关注对象的创建过程&#xff0c;包括如何实例化对象&#xff0c;并隐藏实例化的细节。 单例模式&#xff08;Singleton&#xff09;&#xff1a;确保一个类只有一个实例&#xff0c;并提…

go使用gjson操作json数据

gjson使用 gjson介绍安装gjson库解析 JSON 字符串路径语法复杂查询遍历和修改结论 gjson介绍 gjson 是一个 Go 语言库&#xff0c;用于快速解析 JSON 数据。它提供了非常简洁的 API 来查询 JSON 数据&#xff0c;无需预先定义 Go 结构体或映射&#xff08;map&#xff09;来匹…

《程序猿学会 Vue · 基础与实战篇》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

数据结构(二叉树-1)

文章目录 一、树 1.1 树的概念与结构 1.2 树的相关术语 1.3 树的表示 二、二叉树 2.1 二叉树的概念与结构 2.2特殊的二叉树 满二叉树 完全二叉树 2.3 二叉树的存储结构 三、实现顺序结构二叉树 3.1 堆的概念与结构 3.2 堆的实现 Heap.h Heap.c 默认初始化堆 堆的销毁 堆的插入 …

Python--Pandas基础------1

Pandas 是一个基于 Python 编程语言的开源数据分析工具&#xff0c;专注于提供快速、灵活且高效的数据结构和数据操作工具。Pandas 提供了丰富的功能&#xff0c;包括数据清洗、数据转换、数据分组、数据合并等。它能够轻松处理各种数据源的数据导入和导出&#xff0c;如CSV、E…

2024100读书笔记|《飞花令·夏》——鲜鲫银丝脍,香芹碧涧羹,人皆苦炎热,我爱夏日长

2024100读书笔记|《飞花令夏》——鲜鲫银丝脍&#xff0c;香芹碧涧羹&#xff0c;人皆苦炎热&#xff0c;我爱夏日长 《飞花令夏&#xff08;中国文化古典诗词品鉴&#xff09;》素心落雪 编著&#xff0c;飞花令得名于唐代诗人韩翃《寒食》中的名句“春城无处不飞花”&#xf…

matlab仿真 模拟调制(下)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all ts0.001; t0:ts:10-ts; fs1/ts; dffs/length(t); msgrandi([-3 3],100,1); msg1msg*ones(1,fs/10); msg2reshape(ms…

Stable Diffusion 使用详解(1)---- 提示词及相关参数

目录 背景 提示词 内容提示词 人物及主体特征 场景 环境光照 画幅视角 注意事项及示例 标准化提示词 画质等级 风格与真实性 具体要求 背景处理 光线与色彩 负向提示词 小结 常用工具 另外几个相关参数 迭代步数 宽度与高度 提示词引导系数 图片数量 背景…

算法学习7——回溯算法

什么是回溯算法&#xff1f; 回溯算法是一种试探性搜索算法&#xff0c;通过递归的方式逐步构建解决方案&#xff0c;并在发现当前路径不满足条件时回退到上一步。回溯算法特别适用于组合优化问题&#xff0c;如全排列、组合、子集和图的着色问题等。 回溯算法的特点 递归&a…

cdh社区版免费替代方案。

免费的话&#xff0c;现在国产化的东西其实也还可以&#xff0c;而且国家在追求信创&#xff08;信息科技创新&#xff09;嘛。只有用的人多了&#xff0c;用的公司多了&#xff0c;国产的才有钱。才会发展的更好&#xff0c;良性循环。恶性的就是操作系统&#xff0c;大家都在…

Unity | Shader基础知识(第十九集:顶点着色器的进一步理解-易错点讲解)

目录 一、前言 二、网格 三、方法UnityObjectToClipPos 四、顶点着色器和片元着色器的POSITION 五、作者的碎碎念 一、前言 之前我们简单讲解过顶点着色器&#xff0c;也简单讲解了表面着色器&#xff0c;并且一起做了一些案例&#xff0c;因为顶点着色器本身是更自由一些…

RT-Thread必考面试题及参考答案

目录 RT-Thread操作系统的核心架构是什么? RT-Thread支持哪些微处理器架构? RT-Thread中任务调度的基本原则是什么? 如何在RT-Thread中创建一个新的线程? RT-Thread中的线程优先级如何影响调度? RT-Thread中的信号量和互斥锁有何区别? 描述一下RT-Thread中消息队列…

【Git多人协作开发】不同的分支下的多人协作开发模式

目录 0.前言背景 1.开发者1☞完成准备工作&协作开发 1.1查看分支情况 1.2创建本地分支feature-1 1.3三板斧 1.4push推本地分支feature-1到远程仓库 2.开发者2☞完成准备工作&协作开发 2.1创建本地分支feature-2 2.2三板斧 2.2push推送本地feature-2到远程仓库…

Sprong Boot学习|使用 guava-retrying 实现重试

背景 后端业务系统可能会在接口调用失败、网络拥塞超时、任务执行失败、系统错误等异常情况出现的时候进行重试操作&#xff0c;然而不同的场景对于重试的延迟间隔&#xff0c;频次等会有不同的要求&#xff0c;如果自己编排重试代码会比较繁琐&#xff0c;使用 guava-retryin…

LeetCode:合并2个有序数组(C语言)

1、2个非递减排序的整数数组nums1和nums2&#xff0c;2个整数m和n&#xff0c;代表nums1和nums2中的元素个数。合并nums2到nums1&#xff0c;合并后的数组也进行非递减排序 2、示例 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,3,0,0,0], m 3, nums2 [2,5,6], n 3 输出…

springSecurity学习之springSecurity web如何取得用户信息

web如何取得用户信息 之前说过SecurityContextHolder默认使用的是ThreadLocal来进行存储的&#xff0c;而且每次都会清除&#xff0c;但是web每次请求都会验证用户权限&#xff0c;这是如何做到的呢&#xff1f; 这是通过SecurityContextPersistenceFilter来实现的&#xff0…

FineBI连接MySQL5.7

一、在FineBI系统管理中&#xff0c;点击【新建数据库连接】 选择MySQL数据库 配置数据库连接&#xff0c;如下&#xff0c;其中数据库名称就是需要连接的目标数据库