TypeScript学习笔记5-类型别名

在 JavaScript 中,类型别名是一种自定义类型的方式,通过关键字 `type` 来创建。它允许你为现有的类型提供一个更具描述性的名称,从而增强代码的可读性和可维护性。类型别名通常与联合类型(Union Types)或交叉类型(Intersection Types)结合使用,以创建更复杂的类型。


1️⃣普通使用

我们可以简单的给username用到的string类型设置未userName

type userName = string

也可以使用联合类型命名一个可能是string也可能是string[ ]的类型

type studentName = string | stirng[ ]

 2️⃣更常使用到的地方是,给对象定义类型

比如 给“学生”类型student起别名

type student = {name:string,age:number
}let statichit:student ={name:"statichit",age:21
}

 这里也可以使用接口中的描述属性比如?或readonly

3️⃣定义函数

type fn = (name: string, age: number) => stringlet fn1: fn = function (name: string, age: number): string {return "xxx"
}let fn2: fn = (name: string, age: number): string => "xxx"

在函数中使用

 (有点像java中的类)

// 定义类型别名
type UserID = string;
type UserName = string;
type User = {id: UserID;name: UserName;
};// 使用类型别名
function printUserInfo(user: User) {console.log(`ID: ${user.id}, Name: ${user.name}`);
}// 创建用户对象并传递给函数
const currentUser: User = {id: '123',name: 'John Doe'
};
printUserInfo(currentUser);

这里我们很容易发现,它和interface有点像,那么他们之间有什么区别么 

type与interface的区别

1.interface可以继承 type 只能通过 & 交叉类型合并

interface I1{name: string
}
interface I2 extends I1{age: string
}type T1 = {name: string
}
type T2 = {age: number
}let t:T1&T2 = {name:"张三",age: 12
}

2. type 可以定义 联合类型 和 可以使用一些操作符 interface不行

type nameType = string|string[]

interface只能以对象形式定义内容

3. interface 遇到重名的会自动合并 type 不行

interface A1 {name: string
}
// 遇到相同的会合并
interface A1{age: number
}let a1:A1={name:"A1",age: 13
}type A1 = {name: string
}// 会直接报错
type A1 ={}

类型别名作用:

  • 使代码更易读和易维护
  • 提高代码的可重用性

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

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

相关文章

AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4

原文:AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4 | MLExpert - Crush Your Machine Learning interview In this tutorial, well explore AutoGen1, a Microsoft library that lets you create LLM applications with agents. These agents can communicate and …

PostgreSQL入门到实战-第二十四弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(八)官网地址PostgreSQL概述PostgreSQL中CROSS JOIN命令理论PostgreSQL中CROSS JOIN命令实战更新计划 PostgreSQL中表连接操作(八) 使用PostgreSQL CROSS JOIN从连接的表中生成行的笛卡尔乘积。 官网地址 声明: 由于操作系统, 版…

git commit --amend用法

一、git commit --amend 修改提交信息:您可以使用 git commit --amend 命令来修改最新提交的提交信息。执行该命令后,Git 将会打开文本编辑器(通常是的默认文本编辑器),以便编辑提交信息。完成编辑后保存并关闭编辑器…

数据库(3)

目录 11.那你知道什么是覆盖索引和回表吗? 12.什么是MVCC?说说MySQL实现MVCC的原理? 13.MySQL的锁的类型有哪些呢? 14.你们数据量级多大?分库分表是怎么做的? 15.分表后非分库字段sharding_key的查询怎…

C语言学习笔记之结构体(一)

目录 什么是结构体? 结构体的声明 结构体变量的定义和初始化 结构体成员的访问 结构体传参 什么是结构体? 在现实生活中的很多事物无法用单一类型的变量就能描述清楚,如:描述一个学生,需要姓名,年龄&a…

从零实现诗词GPT大模型:了解自注意力机制

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 这篇文档我们开始对GPT的核心组件Transformer进行一个详细的讲解, 加急编写中…

MR混合现实情景实训教学系统在汽车维修中的应用

首先,该系统能够提供真实的汽车维修场景,使学生能够更直观地了解和掌握汽车维修技能。通过混合现实技术,学生可以在虚拟环境中模拟汽车故障,并使用真实的工具和设备进行维修操作。这不仅可以减少实际车辆的损坏风险,还…

复旦新出!大规模语言模型:从理论到实践,书籍PDF分享

自2018年以来&#xff0c;包含Google、OpenAI、Meta、百度、华为等公司和研究机构都纷纷发布了包括BERT&#xff0c; GPT等在内多种模型&#xff0c;并在几乎所有自然语言处理任务中都表现出色。 今天给大家推荐一本大模型方面的书籍<大规模语言模型&#xff1a;从理论到实…

nginx禁止ip访问,只允许域名访问

无论ip直接访问&#xff0c;还是通过域名访问&#xff0c;最终都是通过ip访问到服务器浏览器访问时会携带Host参数&#xff0c;通过ip访问时携带的是ip&#xff0c;通过域名访问时携带的是域名nginx收到请求后判断host的值&#xff0c;如果判断出不是通过域名访问的则拒绝&…

jupyter切换不同的内核(虚拟环境)(anaconda 24.1.2)

jupyter切换不同的内核&#xff08;anaconda 24.1.2&#xff09; 主要的两条命令&#xff1a; conda install ipykernel python -m ipykernel install --user --name 环境名称 anaconda的版本号 conda --version实例&#xff1a; 一、首先可以看到已经创…

【Linux】进程学习① (进程的PCB(task_struct)进程的标识符详解进程的创建fork函数)

目录 ​编辑 1.进程的概念 1.1进程的描述与组织&#xff1a;进程的PCB 进程&#xff1a;进程是 内核pcb对象可执行程序/内核数据结构可执行程序进程 1.3 task_struct 2.PCB内部属性 3 查看进程 4.获取进程标识符&#xff1a;getpid函数&#xff08;4-6主要围绕进程的标识符展开…

音频变速python版

音频变速 如何能在不改变音频其他特点的情况下&#xff0c;只改变语速呢&#xff1f; 有几个python的库可以实现该功能&#xff0c;下面一一介绍。 pydub库 首先&#xff0c;确保安装了pydub和ffmpeg。 下面是一个简单的Python脚本&#xff0c;展示如何改变音频的播放速度&a…

跨域问题 及 解决

跨域&#xff08;Cross-Origin Resource Sharing&#xff0c;CORS&#xff09;是由浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;引起的&#xff0c;同源策略是浏览器最基本的安全机制之一&#xff0c;用于防止恶意网站通过脚本等方式访问用户的私密信息。同源策…

代码随想录算法训练营第三十五天|509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯、62.不同路径

文档链接&#xff1a;https://programmercarl.com/ LeetCode509.斐波那契数 题目链接&#xff1a;https://leetcode.cn/problems/fibonacci-number/ 思路&#xff1a; 动规五部曲&#xff1a; 这里我们要用一个一维dp数组来保存递归的结果 1.确定dp数组以及下标的含义 d…

数据结构与算法的经典问题 — 背包问题

数据结构与算法 数据结构与算法是计算机科学中的两个核心概念&#xff0c;它们在软件开发和问题解决中起着至关重要的作用。 数据结构 数据结构是计算机中存储、组织和管理数据的方式&#xff0c;它能够帮助我们高效地访问和修改数据。不同的数据结构适用于不同类型的应用场…

【LeetCode热题100】【回溯】组合总和

题目链接&#xff1a;39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 要找一个和的所有组合&#xff0c;可以从每个数开始深度遍历&#xff0c;在包括自己本身下累加求和&#xff0c;不管行不行都回退状态 优化&#xff1a;每个数从本身开始深度遍历&#xff0c;因为前…

Leetcode 528 按权重随机选择

题目信息 LeetoCode地址: . - 力扣&#xff08;LeetCode&#xff09; 题目理解 想象题目提供的w数组里是很多根长短不一的棍子&#xff0c;然后我们将其按顺序排列成一条线。 然后我们扔一个沙包&#xff0c;砸中哪一根棍子&#xff0c;就代表命中了那根棍子代表的数字。很…

MYSQL索引失效精讲

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小周同志&#xff0c;25届双非校招生Java选手&#xff0c;很高兴认识大家 &#x1f4d5;学习出处&#xff1a;本文是学自小林coding (xiaolincoding.com) 网站的MYSQL图解篇 &#x1f525;如果感觉博主的文章还不错的话…

韩顺平Java | C25 JDBC和连接池(上)

概述 JDBC概述&#xff1a;JDBC为访问不同数据库提供统一接口&#xff0c;为使用者屏蔽细节问题。Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统&#xff0c;从而完成对数据库的各种操作。 // 模拟代码 //JdbcInterface.java --Java规定的JDBC接口(方法) p…

redis的设计与实现(五)——独立功能

1. Redis的其他功能 redis 除了简单对对象的增删改查的功能之外&#xff0c;其实还有其他高级功能&#xff0c;了解这些内容有利于我们更灵活的使用 redis 完成我们的业务功能。 2. 发布与订阅 2.1. 基本概念 很多中间件都有发布与订阅功能&#xff0c;但是&#xff0c;作为一…