ts的interface和type区别

1. 场景

interface 是用来描述对象类型的结构,可以定义对象的属性名和属性值的类型,也可以定义函数类型。
interface User {name: string;age: number;sayHello(): void;
}
const user: User = {name: "",age: 2,sayHello() {...}
}

可以用这个User接口来定义一个满足这个结构的对象。
type 可以定义任何类型,不仅仅是对象类型,也可以定义基本类型、联合类型、交叉类型等。

type Age = number;
type Person = {name: string;age: Age;
}
const alice: Person = {name: "",age: 2
}

用 type 定义一个心的类型别名,然后用这个别名来定义一个对象

2. 区别

interface 和 type 的区别在于:

  • interface 只能定义对象类型,而 type 可以定义任何类型。 interface
  • 可以被合并(merge),如果多个同名接口存在,它们会被自动合并为一个接口,而 type 不行。 interface
  • 支持扩展(extends),可以扩展其他接口;而 type 不支持扩展。

使用场景:

  • 如果需要定义一个对象的类型,应该使用 interface 。
  • 如果需要定义一个联合类型、交叉类型等,或者需要定义一个类型别名,应该使用type 。
  • 如果需要对一个已有的类型进行扩展,或者需要合并多个同名接口,应该使用 interface 。

3. type的类型合并

type 可以定义类型别名,它们可以使用 & 运算符合并多个类型,生成一个新的类型。

type Person = {name: string;age: Age;
}
type Student = {id: number;course: string;
}
type CollegeStudent = Person & Student;

用 & 合并为一个type

4. interface 类型合并

interface Shape {y: number;x: number;
}
interface Rect extends Shape {width: number;height: number;
}
const rect: Rect = {...}

5. type和interface混合

骚操作将 type 和 interface 混合使用,竟然真的可以😂

type CrossScrollType = {children: JSX.Element
}interface CrossScrollInterface {title: string;
}
type CrossScrollAll = CrossScrollType & CrossScrollInterface

6. 同名合并

interface:多个 同名的 interface 却是可以通过这种形式合并,但是定义的属性名冲突也会报错。
在这里插入图片描述

type CrossScrollType = {children: JSX.Element
}interface CrossScrollInterface {title: string;
}
interface CrossScrollInterface {name: number;
}
type CrossScrollAll = CrossScrollType & CrossScrollInterface

type: 定义多个相同的type名就会直接爆红,页面也会报错。
在这里插入图片描述
所以只有interface 支持多个相同的interface名,type 会直接报错。
extends 可以将属性的类型进行收窄,比如从 string | number 变成 string。但声明合并不行,类型必须完全一致。

参考:知乎和掘金

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

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

相关文章

数据结构 之 二叉树

🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ 🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖 🎉希望我们在一篇篇的文章中能够共同进步!!&…

【MySQL高级篇】08-事务篇

第13章:事务基础知识 #09-事务的基础知识#1.事务的完成过程 #步骤1:开启事务 #步骤2:一系列的DML操作 #.... #步骤3:事务结束的状态:提交的状态(COMMIT) 、 中止的状态(ROLLBACK)#2. 显式事务#2.1 如何开启? 使用关键…

StarRocks面试题及答案整理,最新面试题

StarRocks 的 MV(物化视图)机制是如何工作的? StarRocks 的物化视图(MV)机制通过预先计算和存储数据的聚合结果或者转换结果来提高查询性能。其工作原理如下: 1、数据预处理: 在创建物化视图时…

SpringAI——Java生态接入LLM

最近,Spring官网发布了SpringAI,可点此查看https://spring.io/blog/2024/03/12/spring-ai-0-8-1-released,对于SpringAI的介绍,可看官方文档:https://spring.io/projects/spring-ai#overview。 本文将使用SpringAI配合…

2024 年值得关注的三大 DevOps 趋势

在过去几年中,DevOps 世界以前所未有的速度发展,但它仍然是许多组织效率、创新和数字化转型的主要驱动力。 Google 的 2023 年 加速 DevOps 状态报告显示,公司的软件交付性能质量可以预测组织绩效、团队绩效和员工福祉。 2024年&#xff0c…

【自然语言处理】NLP入门(八):1、正则表达式与Python中的实现(8):正则表达式元字符:.、[]、^、$、*、+、?、{m,n}

文章目录 一、前言二、正则表达式与Python中的实现1、字符串构造2、字符串截取3、字符串格式化输出4、字符转义符5、字符串常用函数6、字符串常用方法7、正则表达式1. .:表示除换行符以外的任意字符2. []:指定字符集3. ^ :匹配行首&#xff0…

Stable Diffusion科普文章【附升级gpt4.0秘笈】

随着人工智能技术的飞速发展,我们越来越多地看到计算机生成的艺术作品出现在我们的生活中。其中,Stable Diffusion作为一种创新的图像生成技术,正在引领一场艺术创作的革命。本文将为您科普Stable Diffusion的相关知识,带您走进这…

第十二届蓝桥杯EDA省赛真题分析

前言: 第十二届蓝桥杯EDA比赛用的是AD软件,从第十四届起都是使用嘉立创EDA专业版,所以在这里我用嘉立创EDA专业版实现题目要求。 一、省赛第一套真题题目 主观题整套题目如下: 试题一:库文件设计(5分&am…

双指针、bfs与图论

1238. 日志统计 - AcWing题库 import java.util.*;class PII implements Comparable<PII>{int x, y;public PII(int x, int y){this.x x;this.y y;}public int compareTo(PII o){return Integer.compare(x, o.x);} }public class Main{static int N 100010, D, K;st…

Java高级互联网架构师之路:排查当前JVM错误的步骤

程序 这个程序是有问题的,我们通过一些命令来分析这个程序究竟是哪里出了问题。首先把当前的程序通过SSH工具传输到centos系统中,之后我们就可以在linux环境下编译和执行。 注意一点:上面类的名字是Z,但是在linux环境下,我们将其改为了AA,并且文件名改为了AA,所以文章下…

zookeeper基础学习之六: zookeeper java客户端curator

简介 Curator是Netflix公司开源的一套zookeeper客户端框架&#xff0c;解决了很多Zookeeper客户端非常底层的细节开发工作&#xff0c;包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt&#xff08;Zookeeper&#xff09;以一句“Guava is to Java…

单片机FLASH深度解析和编程实践(下)

本篇文章将同大家分享单片机FLASH编程的相关寄存器和寄存器操作及库函数操作。本篇文章依然以STM32单片机为例进行解析。有关FLASH的基本原理和实现方法&#xff0c;大家可以参考上一篇文章&#xff1a;单片机FLASH深度解析和编程实践&#xff08;上&#xff09;-CSDN博客 目录…