TypeScript 中的 interface 和 type 有什么区别?应该如何选择?

背景

TypeScript中的 interfacetype 都是声明自定义类型的方式,但它们有一些区别,适用于不同的使用场景。

两者使用案例

interface

interface 主要用于描述对象的形状或者类的结构,这是它最经常的应用场景。

interface使用示例:

interface Person {name: string;age: number;
}function greet(person: Person) {return 'Hello, ' + person.name;
}let user = {name: 'Jack', age: 20};console.log(greet(user));

在这个例子中,我们定义了一个 Person 接口,它有两个属性,名字和年龄。然后我们创建了一个函数 greet,它接收一个 Person 类型的参数。最后,我们创建了一个 user 对象并调用了 greet 函数。this example avoided passing an object that didn’t meet the Person interface structure to the greet function.

type

type 更概括一点,它除了可以用于描述对象的形状,还可以用于其他种类的类型设置,例如原始类型(primitive),联合类型(union),交叉类型(intersection),元组等。

type使用示例:

声明一个只有名字的类型:

type Name = string;let name: Name = 'Tom';

声明一个联合类型:

type StringOrNumber = string | number;let input: StringOrNumber;input = 'Tom'; // OK
input = 20;  // OK
input = true;  // Error

两者具体区别

  1. interface 更专注于定义对象或类的结构,而 type 更通用。
  2. interface 可以被实现(implements)和扩展(extends),但是 type 不可以。
  3. interface 可以被声明合并,如果多次声明同一个 interface,那么它们会被自动合并,当 type 不具备声明合并的特性。

根据上述差异,选择使用 interface 还是 type 就基于具体的业务需求。在大部分情况下,如果仅仅是为了类型检查,interfacetype 都可以满足需求,然而如果需要进行 OOP (Object Oriented Programming) 的实践,如类的定义与继承,则 interface 会更加合适一些。

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

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

相关文章

机器学习之线性回归(Linear Regression)附代码

概念 线性回归(Linear Regression)是机器学习中的一种基本的监督学习算法,用于建立输入变量(特征)与输出变量(目标)之间的线性关系。它假设输入变量与输出变量之间存在线性关系,并试图找到最佳拟合线来描述这种关系。 在简单线性回归中,只涉及两个变量:一个是自变量…

MySQL:通过官方mysql server,搭建绿色版mysql服务器(Windows)

1. 官网下载mysql server 下载mysql server的zip文件,地址: https://downloads.mysql.com/archives/community/ 解压后 2. 初始化数据库 运行cmd, 进入bin目录,运行 mysqld --initialize-insecureinitialize-insecure说明如…

python面向对象反射

就是通过字符串的形式操作对象相关属性 反射基本语法 from django.test import TestCase# Create your tests here. class Students:def __init__(self, name, gender):self.name nameself.gender genderdef play(self, game, novel):print(game, novel)s Students(lyz, …

Jenkins 插件下载速度慢安装失败?这篇文章可能解决你头等难题!

Jenkins部署完毕,如果不安装插件的话,那它就是一个光杆司令,啥事也做不了! 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI/CD必要插件。 但是问题来了,jenkins下载插件速度非常慢&#xff0c…

Educational Codeforces Round 160 (Div. 2) A~E

A.Rating Increase(思维) 题意: 给出一个仅包含数字的字符串 s s s,要求将该字符串按以下要求分成左右两部分 a , b a,b a,b: 两个数字均不包含前导 0 0 0 两个数字均大于 0 0 0 b > a b > a b>a 如果…

算法基础之快速幂

快速幂 核心思想&#xff1a;logk的复杂度求出ak mod p 将k拆成若干个2的n之和 (二进制) #include<iostream>#include<algorithm>using namespace std;typedef long long LL;LL qmi(int a,int k,int p){LL res 1 % p;while(k) //k转为二进制 还有正数 就进行…

U-MixFormer:用于高效语义分割的类unet结构的混合注意力Transformer

论文&#xff1a; 代码&#xff1a;GitHub - RecklessRonan/MuSE 感觉这篇比较优雅无痛涨点欸.....最近要期末了没时间看文章和做实验了&#xff08;摊 摘要 语义分割在Transformer架构的适应下取得了显著的进步。与Transformer的进步并行的是基于CNN的U-Net在高质量医学影…

QT基础介绍

QT介绍 QT 是跨平台的c开发库&#xff0c;主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;程序&#xff0c;当然也可以开发不带界面的命令行&#xff08;command user interface&#xff0c;CUI&#xff09;程序。 Qt中文官网&…

互操作性(Interoperability)如何影响着机器学习的发展?

互操作性&#xff08;Interoperability&#xff09;&#xff0c;也称为互用性&#xff0c;即两个系统之间有效沟通的能力&#xff0c;是机器学习未来发展中的关键因素。对于银行业、医疗和其他生活服务行业&#xff0c;我们期望那些用于信息交换的平台可以在我们需要时无缝沟通…

揭开 Vue3 响应式系统的神秘面纱:多种监听状态变量变化的方法大揭秘

在 Vue 3 中&#xff0c;响应式系统是其核心特性之一。通过响应式系统&#xff0c;Vue 可以自动跟踪组件的状态变化&#xff0c;并根据变化更新视图。这使得开发者能够更加高效地开发复杂的用户界面&#xff0c;同时保持代码的可读性和可维护性。在本文中&#xff0c;我们将深入…

mt5和mt4交易软件有什么区别?

MetaTrader 4&#xff08;MT4&#xff09;和MetaTrader 5&#xff08;MT5&#xff09;是两种广泛使用的外汇和金融市场交易平台&#xff0c;由MetaQuotes公司开发。尽管它们都是外汇交易的常见选择&#xff0c;但在功能和特性上存在一些区别。以下是MT4和MT5之间的主要区别&…

python三大开发框架django、 flask 和 fastapi 对比

本文讲述了什么启发了 FastAPI 的诞生&#xff0c;它与其他替代框架的对比&#xff0c;以及从中汲取的经验。 如果不是基于前人的成果&#xff0c;FastAPI 将不会存在。在 FastAPI 之前&#xff0c;前人已经创建了许多工具 。 几年来&#xff0c;我一直在避免创建新框架。首先&…

12.21 知识总结(def之序列化常用字段、常用参数、soruce用法、定制返回字段等)

一、 序列化类常用字段 字段字段构造方式BooleanFieldBooleanField()NullBooleanFieldNullBooleanField()CharFieldCharField(max_lengthNone, min_lengthNone, allow_blankFalse, trim_whitespaceTrue)EmailFieldEmailField(max_lengthNone, min_lengthNone, allow_blankFals…

Educational Codeforces Round 160 (Rated for Div. 2) A~C

目录 A. Rating Increase 题目分析&#xff1a; B. Swap and Delete 题目分析: C. Game with Multiset 题目分析: A. Rating Increase 题目分析&#xff1a; 因为首部不为零&#xff0c;故我们从第二个字符开始遍历&#xff0c;如果遇到第一个不为‘0’的字符&#xff0…

C#文件操作(一)

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第20章《文件》 二、操作文件的相关类 在C#应用程序中Syste.IO名称空间包含用于在文件中读写数据的类。在此我列举一下File、Directory、Path、FileInfo、DirectoryInfo、FileSystemInfo、FileSystemWatcher。其中在Syste…

《Spring Cloud Gateway 技术要点》

中文文档&#xff1f; Spring Cloud Gateway 中文文档 他是如何工作的? 它是如何工作的 路由谓词 12种路由谓词 Route Predicate&#xff08;路由谓词&#xff09;工厂 常见问题 1、深入解析spring cloud gateway】09 巨坑&#xff01;GlobalFilter的执行顺序 2、Sprin…

Lettuce操作redis

Lettuce是一个高性能基于Java编写的Redis驱动框架&#xff0c;底层集成了Project Reactor提供天然的反应式编程&#xff0c;通信框架集成了Netty使用了非阻塞IO&#xff0c;5.x版本之后融合了JDK1.8的异步编程特性&#xff0c;在保证高性能的同时提供了十分丰富易用的API。本文…

伦敦金交易内地与香港有何区别

伦敦金交易是国际银行间市场层面的现货黄黄金交易&#xff0c;亚洲市场的交易中心在中国香港&#xff0c;现在不管是香港本地还是内地的投资者&#xff0c;都可以在网上开户&#xff0c;通过香港的平台参与伦敦金交易&#xff0c;所得到的服务是同等的、公平的、与国际市场接轨…

大规模数据查询:MySQL 与 Spring Boot 分页实战

引言 随着信息时代的到来&#xff0c;数据量的爆发性增长让分页查询成为数据库操作中的常见需求。数据库查询的效率直接影响着系统性能&#xff0c;因此在实际项目中&#xff0c;我们需要精心选择和使用分页查询方法。本文将深入研究在 MySQL 数据库中如何进行分页查询&#xf…

理论篇:什么是NPM以及为什么NPM如此重要

&#x1f4cc; NPM&#xff0c;全称是 Node Package Manager&#xff0c;NodeJS 包管理工具 当我们开始现代化前端项目开发时&#xff0c;总是会被告知需要提前安装NodeJS&#xff0c;而且NodeJS软件包不仅仅会在我们的开发设备上安装NodeJS运行环境&#xff0c;同时会附带NPM工…