TypeScript type类型别名

文章目录

  • 1. 基本类型别名
  • 2. 对象类型别名
  • 3. 交叉类型(Intersection Types)
  • 4. 联合类型(Union Types)
  • 5. 映射类型(Mapped Types)
  • 6. 条件类型(Conditional Types)
  • 7. 索引访问类型(Indexed Access Types)
  • 8. 推断类型(Inferred Types)
  • 9. 泛型(Generics)

在TypeScript(简称TS)中, type 关键字用于创建类型别名,它允许你为现有的类型创建一个新的名字,这有助于组织代码、提高可读性,并允许你创建更复杂的类型。


1. 基本类型别名

type 最简单的用法是为现有的基本类型(如 string、number、boolean 等)创建别名。

type Name = string;  
type Age = number;  let name: Name = "Alice";  
let age: Age = 30;

2. 对象类型别名

可以使用 type 来定义对象的形状,这类似于 interface,但 type 允许你在单个声明中定义更复杂的类型。

type Person = {  name: string;  age: number;  greet: () => void;  
};  let person: Person = {  name: "Alice",  age: 30,  greet: () => console.log("Hello!")  
};

3. 交叉类型(Intersection Types)

type 可以用来创建交叉类型,它结合了多个类型的所有成员。

这类似于 interface 的 extend

type Named = { name: string };  
type Aged = { age: number };  type Person = Named & Aged;  let person: Person = {  name: "Alice",  age: 30  
};

4. 联合类型(Union Types)

联合类型允许一个变量可以是几种类型中的任意一种。

type ID = string | number;  let id: ID = 123;  
// 你可以将 id 赋值为字符串或数字  
id = "abc";

5. 映射类型(Mapped Types)

映射类型通过遍历现有类型的所有属性,并基于这些属性创建新的属性来创建新类型。

type Partial<T> = {  [P in keyof T]?: T[P];  
};  type PersonPartial = Partial<Person>;  let personPartial: PersonPartial = {  name: "Alice" // age 属性是可选的  
};

6. 条件类型(Conditional Types)

条件类型允许你根据条件来定义类型。

type IsNumber<T> = T extends number ? true : false;  type Result1 = IsNumber<string>; // false  
type Result2 = IsNumber<123>;    // true

7. 索引访问类型(Indexed Access Types)

索引访问类型通过类型上的索引签名来访问其属性的类型。

type Prop<T, K extends keyof T> = T[K];  type PersonProps = {  name: string;  age: number;  
};  type NameProp = Prop<PersonProps, 'name'>; // string

8. 推断类型(Inferred Types)

在TypeScript中,当你定义一个变量并赋值时,TypeScript可以推断出该变量的类型。但有时候,你可能想明确指定这个推断出的类型,这时可以使用 type 来创建一个别名。

const arr = [1, 2, 3];  
type ArrayType = typeof arr; // 推断出 ArrayType 是 number[]

9. 泛型(Generics)

type 也可以和泛型一起使用,以创建可重用的类型定义。

type Id<T> = T & { id: number };  type PersonWithId = Id<Person>;  let personWithId: PersonWithId = {  name: "Alice",  age: 30,  id: 1  
};

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

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

相关文章

GRUB常见操作

1、内核启动参数——如何修改启动命令&#xff1f; 1、修改/etc/default/grub 这个文件是生成grub.cfg文件时候的基础参考文件&#xff0c;我们需要修改的内核启动参数就定义在GRUB_CMDLINE_LINUX。 # Set by curtin fast-path installer. GRUB_TIMEOUT5 GRUB_DEFAULT0 GRUB…

leetcode-缺失的第一个正整数-96

题目要求 思路 1.这里的题目要求刚好符合map和unordered_map 2.创建一个对应map把元素添加进去&#xff0c;用map.find(res)进行查找&#xff0c;如果存在返回指向该元素的迭代器&#xff0c;否则返回map::end()。 代码实现 class Solution { public:int minNumberDisappeare…

一文快速掌握高性能内存队列Disruptor

写在文章开头 Disruptor是英国外汇公司LMAX开源的一款高性能内存消息队列&#xff0c;理想情况下单线程可支撑600w的订单。所以本文会从使用以及设计的角度来探讨一下这款神级java消息队列。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java code…

【Java基础】JVM内存简单介绍

JVM把内存分为五块&#xff1a;栈、堆、方法区、本地方法区、寄存器当函数被调用时&#xff0c;函数内部的局部变量在栈中开辟内存&#xff0c;当局部变量的作用域结束时&#xff0c;立刻释放栈中所占据的内存。 栈 栈的特点&#xff1a;先进后出当函数被调用时&#xff0c;为…

unity制作app(5)--发送数据给数据库

这个之前做过&#xff0c;先不做照片的。下一节再做带照片的。 第一步 收集数据 1.先做一个AppModel结构体&#xff0c;这个结构体需要单做的。 using System; using System.Collections.Generic; using System.Linq; using System.Text; //using Assets.Model; public clas…

【Linux】System V 共享内存

文章目录 1. 共享内存示意图2. 共享内存数据结构3. 共享内存函数shmgetshmatshmdtshmctl 4. 实例代码测试共享内存5. 共享内存相关命令6. System V 消息队列&#xff08;了解&#xff09;7. System V 信号量&#xff08;了解&#xff09; 共享内存区是最快的 IPC 形式。一旦这样…

webpack4和webpack5区别3---缓存

webpack4缓存 使用打包的目的是提升项目启动速度&#xff0c;提升开发体验&#xff0c;webpack的打包方式就是把项目内全部文件都走一遍loader和babel处理&#xff0c;所以项目文件内容越来越多&#xff0c;启动的时间就越来越长&#xff0c;随随便便就 run 一分钟。 webpack4 …

力扣每日一题109:有序链表转换二叉搜索树

题目 中等 给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0&#xff0c;-3,9&#xff0c;-10,null,5]&#xff0c;它…

unity中浮点数只保留一位小数

如果你想在 Unity 中保留浮点数的一位小数&#xff0c;你可以使用 ToString() 方法并指定格式化字符串&#xff0c;或者使用 Mathf.Round() 方法来四舍五入到一位小数。以下是两种方法的示例&#xff1a; 使用 ToString() 方法&#xff1a; float floatValue 3.456f; floa…

Linux进程间通信方式

每个进程的用户空间都是独立的&#xff0c;不能相互访问。 所有进程的内核空间(32位系统3G-4G)都是共享的 应用场景 作为缓冲区&#xff0c;处理速度不同的进程之间的数据传输资源共享&#xff1a;多个进程之间共享同样的资源&#xff0c;一个进程对共享数据的修改&#xff0c…

【目录】500 行或更少(500 Lines or Less)

AOSA 500 行或更少&#xff08;500 Lines or Less&#xff09;是《开源应用程序体系结构》(Architecture of Open Source Applications, AOSA)系列的第四卷。该系列的前三卷是关于大型程序必须解决的大问题&#xff0c;而本书专注于程序员在构建新事物时在小规模中做出的设计决…

亚马逊自养号测评环境搭建需要准备哪些?

在当下电商领域竞争白热化的背景下&#xff0c;亚马逊平台的卖家们对流量之于店铺转化率的重要性有着深刻的认识。随着对平台内部流量的依赖逐渐减弱&#xff0c;他们纷纷寻求更多元化的途径来提升销售业绩和品牌的市场影响力。在此过程中&#xff0c;自养号测评成为了一种备受…

Android 11.0 mtk平台系统添加公共so库的配置方法

1.前言 在11.0的系统ROM产品定制化开发中,由于 Android对应用应用的系统库限制越来越严格,上层应用包括(apk、jar包)不能直接引用系统的一些so库了。如果需要使用,只能使用,系统申明的公共库。 如果使用非系统申明的公共库,apk运行后调用该so库时,app会直接挂掉,或者…

VSFTP超详细安装教程

目录 简介 一、安装 1、安装准备 2、安装检查 3、创建帐户 4、修改PAM 5、关闭SELinux 二、VSFTP相关配置 三、重启并访问 四、卸载VSFTP 简介 VSFTP&#xff08;也称为 VSFTPD&#xff0c;代表 "Very Secure FTP Daemon"&#xff09;是一个用于实现 FTP …

Golang日志实战教程:掌握log与syslog库的高效使用

Golang日志实战教程&#xff1a;掌握log与syslog库的高效使用 简介理解 Golang 的 log 库基本概念创建日志记录器自定义日志记录器日志级别 深入 syslogsyslog 的基础配置和使用 syslog高级应用 日志格式化与管理日志格式化日志文件管理 日志的高级应用集成第三方日志框架使用 …

盲盒小程序怎么做?盲盒创业

盲盒作为当下的新兴行业&#xff0c;从出现就备受年轻消费者的追捧&#xff0c;成为了我国发展前景巨大的行业之一。盲盒市场不仅吸引了众多消费者&#xff0c;同时也吸引了更多的创业者&#xff0c;成为了一大创业新模式。 盲盒小程序是一种线上盲盒销售模式&#xff0c;以社…

气膜滑雪馆:滑雪新宠的全面介绍—轻空间

气膜滑雪馆&#xff0c;作为一种创新型的滑雪运动设施&#xff0c;正以其独特的建筑特点和功能优势&#xff0c;成为滑雪运动领域的引领者。这些场馆凭借其轻盈的结构、优良的保温性能和环保节能的特性&#xff0c;为滑雪场馆的建设提供了全新的解决方案。相较于传统建筑&#…

【ElasticSearch】IK分词器中停用词问题

问题描述 在ES中进行部分关键词搜索时&#xff0c;搜索无结果&#xff0c;如搜索 【IT】 环境描述 中文分词插件 这里使用的是 analysis-ik 分词调试 POST test_index/_analyze {"text":"IT Manager","analyzer": "ik_max_word"…

语音识别之chirp信号

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

【Django学习笔记(八)】MySQL的数据管理

MySQL的数据管理 前言正文1、新增数据2、删除数据3、修改数据4、查询数据5、案例&#xff1a;员工管理5.1 创建表结构5.1.1 创建数据库5.1.2 创建数据表 5.2 Python操作MySQL5.2.1 pymysql 的基本操作步骤5.2.2 优化 pymysql 的基本操作步骤5.2.3 查询数据5.2.4 修改数据5.2.5 …