TS中类型别名和接口区别

在很多场景下,interface 和 type都能使用,因此两者在很多时候会被混淆:

接口可以通过之间的继承,实现多种接口的组合
使用类型别名也可以实现多种的,通过&连接,有差异:

  • 子接口中不能重新覆盖父接口中的成员,
  • 类型别名会合并,相同类型的成员进行交叉&。若一个number,一个字符串,就无法赋值。如下:
type User1= {
    name:number,

}
type User2 ={
    name:string
}

type MyUser = User1 & User2
let user:MyUser ={
    name:'zdy' 
} 

在这里插入图片描述

交叉平时用的不算很多,接口的继承用的多一些

推荐使用(接口)interface。

1.类型别名

type 会给一个类型起个新名字。 type 有时和 interface 很容易混淆,但是,不同的是,type可以作用于原始值(基本类型),联合类型,元组以及其它任何你需要手写的类型。

起别名不会新建一个类型,它创建了一个新名字来引用那个类型。给基本类型起别名作用不大,但是可以做为文档的一种形式使用.

type Name = string; // 基本类型

type NameFun = () => string; // 函数

type NameOrRFun = Name | NameFun; // 联合类型

function getName(n: NameOrRFun): Name {
    if (typeof n === 'string') {
        return n;
    } 
    return n();
}


2.接口

接口使用 interface 关键字进行定义, 在没有设置特殊标识时, 使用接口作为类型定义变量必须将接口内的属性完整定义, 不然就会报错 . 接口定义对象默认属性是可以更改的,接口相当于是一种契约

interface Person {
  name: string
  age: number
}
const person: Person = {
  name: 'a',
  age: 1
}
person.age = 2
console.log(person) // {name: 'a', age: 2}

一点小细节:

他们在约束函数时候形式有点不大一样,一个是冒号,一个是箭头

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

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

接口和类型别名最大区别:
接口可以被类实现,而类型别名不可以
当然接口也可以继承类,表示类中的所有成员,都在接口中

// 火圈接口
 interface IFireShow{
    singleFire():void;
    doubleFire():void;
}

// 动物类:
abstract class Animal {
    abstract type:string;
    constructor(public name:string,public age:number){

    }
    sayHello(){
        console.log(`大家好,我是${this.name},我今年${this.age}`);
    }
}


class Lion extends Animal implements IFireShow{
    type:string = "狮子";
    singleFire(){
        console.log(`${this.name}我会喷单火圈`);
    }

    doubleFire(){
        console.log(`${this.name}我会喷双火圈`);
    }
}

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

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

相关文章

迭代器的封装与反向迭代器

一、反向迭代器 在list模拟实现的过程中,第一次接触了迭代器的封装,将list的指针封装成了一个新的类型,并且以迭代器的基本功能对其进行了运算符重载 反向迭代器是对正向迭代器的封装,并且体现了泛型编程的思想,任意…

0基础学习PyFlink——用户自定义函数之UDAF

大纲 UDAF入参并非表中一行(Row)的集合计算每个人考了几门课计算每门课有几个人考试计算每个人的平均分计算每课的平均分计算每个人的最高分和最低分 入参是表中一行(Row)的集合计算每个人的最高分、最低分以及所属的课程计算每课…

中文编程工具免费版下载,中文开发语言工具免费版下载

中文编程工具免费版下载,中文开发语言工具免费版下载 中文编程工具开发的实际部分案例如下图 编程系统化课程总目录及明细,点击进入了解详情。 https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502

栈、队列、矩阵的总结

栈的应用 括号匹配 表达式求值(中缀,后缀) 中缀转后缀(机算) 中缀机算 后缀机算 总结 特殊矩阵 对称矩阵的压缩存储 三角矩阵 三对角矩阵 稀疏矩阵的压缩存储

龙芯3A5000上安装微信

原文链接:龙芯3A5000上安装微信 hello,大家好啊,今天给大家带来一篇在龙芯3A5000上安装微信的文章,主要给大家展示一下在龙芯架构上使用微信的情况,看看内置浏览器、看一看、小程序等是否能正常打开使用。 1、查看系统…

Hadoop 请求数据长度 Requested Data length 超过配置的最大值

一、问题 现象 Spark 任务速度变慢,也不失败。 DataNode 内存足够 CPU 负载不高 GC 时间也不长。 查看 DataNode 日志,发现有些日志出现很多 Netty RPC 超时。超时的 destination 是一个 NameNode 节点,然后查看 NameNode 节点的日志&…

28 行为型模式-中介者模式

1 中介者模式介绍 2 中介者模式原理 3 中介者模式实现 /*** 抽象中介者**/ public interface Mediator {//处理同事对象注册与转发同事对象信息的方法void apply(String key); }/*** 具体中介者**/ public class MediatorImpl implements Mediator {Overridepublic void apply…

Spring的执行流程与Bean的生命周期

目录 一、Spring的执行流程(生命周期) 二、Bean的生命周期 一、Spring的执行流程(生命周期) 首先在Spring的执行过程中会先启动容器,这里是将配置文件进行加载。根据配置文件完成Bean的实例化,比如是配置的…

安防监控项目---boa服务器的移植

文章目录 前言一、boa服务器简介二、移植步骤三、测试结果四、A9平台移植BOA总结 前言 书接上期,在配置完成环境后,那么接下来呢还得移植两个非常关键的东西,一个呢时boa服务器,另一个呢时cgi接口,boa服务器能够使得我…

干式电抗器的尺寸和重量对系统有什么影响?

干式电抗器是一种用于电力系统中的无功补偿设备,其尺寸和重量对系统有以下几方面的影响,干式电抗器的尺寸和重量会影响设备的安装和布置,较大尺寸和重量的电抗器需要更大的安装空间,并且可能需要额外的支撑结构。在设计系统时需要…

做跨境电商你要用到的API(获取英文商品详情介绍API)

item_get获取商品详情数据 支持以上网站以及亚马逊、阿里巴巴、虾皮、Lazada、速卖通等跨境电商。 获取商品返回示例 "item": {"num_iid": "60840463360","title": "Slip-On Daily Urban Walking Shoes","desc_shor…

CPU眼里的C/C++: 1.3 汇编级单步调试函数执行过程

1. 目的 2. 基于 GDB 的汇编级单步调试 原始代码 #include <stdio.h>long test() {long a 1;a 2;return a; }int main() {int ret test();printf("test return %d\n", ret);return 0; }关键 gdb 命令 si 指令执行汇编级的单步调试info registers 读取寄…

分布式消息队列:RabbitMQ(1)

目录 一:中间件 二:分布式消息队列 2.1:是消息队列 2.1.1:消息队列的优势 2.1.1.1:异步处理化 2.1.1.2:削峰填谷 2.2:分布式消息队列 2.2.1:分布式消息队列的优势 2.2.1.1:数据的持久化 2.2.1.2:可扩展性 2.2.1.3:应用解耦 2.2.1.4:发送订阅 2.2.2:分布式消息队列…

【内网穿透】搭建我的世界Java版服务器,公网远程联机

目录 前言 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 2. 测试局域网联机 3. 公网远程联机 3.1 安装cpolar内网穿透 3.1.1 windows系统 3.1.2 linux系统&#xff08;支持一键自动安装脚本&#xff09; 3.2 创建隧道映射内网端口 3.3 测试公网远程…

编程实例:眼镜店顾客档案管理系统软件,可以登记顾客信息查询历史记录,视力检查登记查询,配镜销售单开单打印

编程实例&#xff1a;眼镜店顾客档案管理系统软件&#xff0c;可以登记顾客信息查询历史记录&#xff0c;视力检查登记查询&#xff0c;配镜销售单开单打印 编程系统化课程总目录及明细&#xff0c;点击进入了解详情。 https://blog.csdn.net/qq_29129627/article/details/1340…

1-07 React配置postcss-px-to-viewport

React配置postcss-px-to-viewport 移动端适配 安装依赖&#xff1a;在项目根目录下运行以下命令安装所需的依赖包&#xff1a; npm install postcss-px-to-viewport --save-dev配置代码 const path require(path);module.exports {webpack: {alias: {: path.resolve(__di…

轻量封装WebGPU渲染系统示例<6>-混合模式(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/BlendTest.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 5. 用户…

基于springboot零食商城管理系统

功能如图所示 摘要 这基于Spring Boot的零食商城管理系统提供了强大的购物车和订单管理功能。用户可以在系统中浏览零食产品&#xff0c;并将它们添加到购物车中。购物车可以保存用户的选购商品&#xff0c;允许随时查看已选择的商品和它们的数量。一旦用户满意&#xff0c;他们…

推荐一个高效测试用例工具:XMind2TestCase..

一、背景 软件测试的核心是什么&#xff1f;毫无疑问是测试分析和测试用例设计&#xff0c;也是日常测试投入最多时间的工作内容之一。 然而&#xff0c;传统的测试用例设计过程有很多痛点&#xff1a; 1、使用Excel表格进行测试用例设计&#xff0c;虽然成本低&#xff0c;但…

PHP与mysql数据库交互

PHP与mysql数据库交互 文章目录 PHP与mysql数据库交互方法速查建立与Mysql链接捕获连接错误SQL语句的执行SQL 错误SQL语句执行结果集对象方法速查 案例 方法速查 函数名 作用 mysqli_connect() 与MySQL 数据库建立连接。 mysqli_close() 关闭与MYSQL 数据库建…