深入了解Typescript中type和interface具体区别?

请添加图片描述

前言

新手刚开始学习 TypeScript 时,往往会对 type 和 interface 的使用场景和方式感到困惑。因此,本文旨在总结 type 和 interface 的概念和用法。

一、概念

  • type:类型别名

    • 概念:允许为一个或多个数据类型(例如 string、number 等)创建一个别名。

    • 举例

      • type dataType = number(为单个类型创建别名)
      • type dataType = number | string | tuple
  • interface:接口

    • 概念:定义参数或方法的数据类型。

二、两者的异同

1. 相同点

type 和 interface 都可用于描述对象或函数。

typescriptCopy code
// Interface
interface User {
    name: string;
    age: number;
}

interface SetUser {
    (name: string, age: number): void;
}

// Type
type User = {
    name: string;
    age: number;
}

type SetUser = (name: string, age: number) => void;

2. 异同点

  • 类型别名可用于联合类型、元组类型、基本类型(原始值),而 interface 不支持。
typescriptCopy code
type PartialPointX = { x: number };
type PartialPointY = { y: number };

type PartialPoint = PartialPointX | PartialPointY;
type Data = [PartialPointX, PartialPointY];
type Name = Number;

let div = document.createElement('div');
type B = typeof div;
  • Interface 可多次定义并被视为合并所有声明成员,而 type 不支持。
typescriptCopy code
interface Point {
  x: number;
}
interface Point {
  y: number;
}
const point: Point = { x: 1, y: 2 };
  • Type 可以使用 in 关键字生成映射类型,但 interface 不支持。
typescriptCopy code
type Keys = 'firstname' | 'surname';

type DudeType = {
  [key in Keys]: string;
};
const test: DudeType = {
  firstname: 'Pawel',
  surname: 'Grzybek',
};
  • 默认导出方式不同。
typescriptCopy code
export default interface Config {
  name: string;
}

type Config2 = { name: string };
export default Config2;
  • Type 支持其他高级操作,如联合类型、映射类型、泛型、元组等。
typescriptCopy code
type StringOrNumber = string | number;
type Text = string | { text: string };
type NameLookup = Dictionary<string, Person>;
type Callback<T> = (data: T) => void;
type Pair<T> = [T, T];
type Coordinates = Pair<number>;![请添加图片描述](https://img-blog.csdnimg.cn/8c79f299ff56440bac9b4f1707f70e26.png)

type Tree<T> = T | { left: Tree<T>, right: Tree<T> };

总结

通常情况下,如果能用 interface 实现,就使用 interface;如果不能,再考虑使用 type

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis系列-Redis过期策略以及内存淘汰机制【6】

目录 Redis系列-Redis过期策略以及内存淘汰机制【6】redis过期策略内存淘汰机制算法LRU算法LFU 其他场景对过期key的处理FAQ为什么不用定时删除策略? Ref 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持 &#x1f4af; Redis系列-Redis过期策略以及内存淘…

zookeeper:服务器有几种状态?

四种&#xff1a; looking(选举中&#xff09;、leading(leader)、following( follower)、 observer(观察者角色&#xff09;

挑战100天 AI In LeetCode Day06(热题+面试经典150题)

挑战100天 AI In LeetCode Day06&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-82.1 题目2.2 题解 三、面试经典 150 题-83.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&am…

直面LED Driver测试挑战,助力显示屏行业变中求变!

杭州亚运会开幕式惊艳世界&#xff0c;引发社会各界一致赞誉&#xff01;在大气浪漫的舞台效果中&#xff0c;LED屏、裸眼3D屏凭借“硬核科技”出圈&#xff0c;为大家带来科技、活力、诗意的“中国式浪漫”观赏体验。而这美轮美奂的LED呈现效果背后&#xff0c;主要依靠的是LE…

Spring Cloud LoadBalancer 负载均衡策略与缓存机制

目录 1. 什么是 LoadBalancer &#xff1f; 2. 负载均衡策略的分类 2.1 常见的负载均衡策略 3. 为什么要学习 Spring Cloud Balancer &#xff1f; 4. Spring Cloud LoadBalancer 内置的两种负载均衡策略 4.1 轮询负载均衡策略&#xff08;默认的&#xff09; 4.2 随机负…

实用篇-Git

一、Git初识 git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件(Java类、xml文件&#xff0c;html文件页面等)&#xff0c;通过git仓库来对这些文件进行存储和管理 git仓库分为 本地仓库&#xff1a;开发人员自己电脑上的git仓库 远程仓库&#…

野火霸天虎 STM32F407 学习笔记_4 构建库函数尝试;使用固件库点亮 LED 灯

构建库函数 创建一个通用的模板&#xff0c;后面写程序直接使用这个模板。 $ ls Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2023/11/8 23:27 Libraries d----- …

grafana 密码忘记怎么重置

1.重置密码的命令&#xff1a; grafana-cli admin reset-admin-password 新的密码

【miniconda+jupyter环境安装】

minicondajupyter环境安装 下载miniconda创建第二个环境修改jupyternotebook的默认路径配置下源&#xff0c;下载快一点安装数据科学常用包先写到这儿&#xff01;拜拜~ 下载miniconda 网址&#xff1a;https://docs.conda.io/en/latest/miniconda.html 运行下载安装&#xff…

数据库SQL

数据库&SQL 数据库基本概念数据库DataBase定义 数据库管理系统(DBMS)定义在JAVA项目中与数据库的结合数据库管理系统中常见的概念库与表的关系 SQL数据类型数字类型浮点类型字符类型TEXT类型日期类型 SQL语言的分类DDL:数据定义语言修改表结构的注意事项 DML:数据操作语言D…

高级运维学习(十四)Zabbix监控(一)

一 监控概述 1 监控的目的 &#xff08;1&#xff09;报告系统运行状况 每一部分必须同时监控内容包括吞吐量、反应时间、使用率等 &#xff08;2&#xff09;提前发现问题 进行服务器性能调整前&#xff0c;知道调整什么找出系统的瓶颈在什么地方 2 监控的资源类别 …

达梦数据库答案

1、 创建数据库实例&#xff0c;到/dm8/data下&#xff0c;数据库名&#xff1a;DEMO&#xff0c;实例名DEMOSERVER&#xff08;10分&#xff09; [dmdbadmServer ~]$ cd /dm8/tool [dmdbadmServer tool]$ ./dbca.sh1、 簇大小32&#xff0c;页大小16&#xff0c;登录密码&…

sm2加密算法

sm2是一种非对称加密算法。在非对称加密中&#xff0c;加密和解密使用的是不同的密钥对&#xff0c;分别是公钥和私钥。SM2算法是由中国国家密码管理局制定的一种椭圆曲线非对称加密算法&#xff0c;用于数字签名、密钥协商等安全通信场景。 这里使用hutool工具类 Hutool 支持对…

uni-app小程序,基于vue实现电商商城

目录 一、前言 二、项目效果图 1.首页 2.分类 1.一级分类 ​ 2.二级分类 3.刷选、动态模拟加载数据 3.购物车 4.我的 ​5.商品详情页 6.提交订单&#xff08;立即购买&#xff09; 7.地址管理 8.提交订单成功 9.登录 10.注册 三、代码实现 1.项目结构截图 uni-app…

【python海洋专题三十九】海洋指数画法--折线图样式三--不同颜色的线条

【python海洋专题三十九】海洋指数画法–折线图样式三–不同颜色的线条 数据:AMO_index 图像展示: 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像修饰之画…

万界星空科技MES系统软件体系架构及应用

MES系统是数字化车间的核心。MES通过数字化生产过程控制&#xff0c;借助自动化和智能化技术手段&#xff0c;实现车间制造控制智能化、生产过程透明化、制造装备数控化和生产信息集成化。生产管理MES系统主要包括车间管理系统、质量管理系统、资源管理系统及数据采集和分析系统…

Android项目升级到AndroidX

1、 2、 然后报错了&#xff1a; The gradle plugin version in your project build.gradle file needs to be set to at least com.android.tools.build:gradle:3.2.0 in order to migrate to AndroidX. 修改gradle版本 31报错了就用30.0.0了 3、 提示备份、然后执行do re…

06、SpringBoot+微信支付 -->商户定时查订单状态、用户取消订单(关闭订单API)、查询订单API--到微信支付平台查询订单

目录 Native 下单、取消订单订单功能完善需求1&#xff1a;商户定时查单前端代码&#xff1a;后端代码&#xff1a;测试&#xff1a;swagger 测试&#xff1a; 需求2&#xff1a;用户取消订单&#xff08;关闭订单API&#xff09;需求&#xff1a;代码&#xff1a;前端&#xf…

漏刻有时百度地图API实战开发(2)文本标签显示和隐藏的切换开关

漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案漏刻有时百度地图API实战开发(2)文本标签显示和隐藏的切换开关漏刻有时百度地图API实战开发(3)自动获取地图多边形中心点坐标漏刻有时百度地图API实战开发(4)显示指定区域在移动端异常的解…

知了汇智主题讲座走进四川轻化工大学

2011年&#xff0c;Netscape创始人马克安德森一句“软件正在吞噬世界”掀起热浪&#xff0c;随着云计算、大数据、人工智能等技术的日趋成熟&#xff0c;我们发现吞噬当下世界的是数字化技术&#xff0c;而非软件。 数字化技术一方面改变着国家、企业、个人之间的竞争规则&…