Ts支持哪些类型和类型运算(上)

目录

1、元组 

2、接口(interface)

3、枚举(Enum)

4、字面量类型

5、keyof

6、in keyof

7、类型的装饰


静态类型系统 就是把 类型检查从运行时提前到了编译时,所以ts类型系统中的许多类型与js并无区别

例如:

基本类型: number、boolean、string、object、bigint、symbol、undefined、null

复合类型方面,JS 有 class、Array,这些 TypeScript 类型系统也都支持,但是又多加了三种类型:元组(Tuple)、接口(Interface)、枚举(Enum)。

1、元组 

说明:元素个数和类型固定的数组类型

type Tuple = [string,number]

2、接口(interface)

说明:用来描述对象、函数、构造器结构

//函数
interface MyPerson {name: string;age: number;
}const obj: MyPerson = {name: "张三",age: 18,
};class Person implements MyPerson {name: "小乔";age: 18;
}

这里我们声明了 一个 名为 MyPerson 的接口 其中有两个属性 1-name 2-age 他们对应的类型为stringnumber

obj对象应用了这个接口,所以obj中必须要有name、age这两个字段且类型必须与MyPerson相互对应

implements译为实现 代码中 Person类实现了MyPerson接口,具体表达的意思与obj相同

// 函数类型
interface SayGood {(name: string): string;
}const sayGood: SayGood = (name: string) => {return   name + 'is good'
}

这里我们声明了 一个 名为 SayGood 的接口描述了一个函数,接受一个name为参数类型是 string 函数的返回值为string

// 构造函数
interface MyPerson {name: string;age: number;
}/*** 该接口描述了一个构造函数* 该构造函数接受两个参数(name 和 age),并返回一个 MyPerson 类型的实例。*/
interface PersonConstructor {new (name: string, age: number): MyPerson;
}/*** @description: 接受一个 PersonConstructor 类型的参数,返回一个 MyPerson 类型* @param {PersonConstructor} ctor* @return {MyPerson}*/
function createPerson(ctor: PersonConstructor):MyPerson {return new ctor('shmily', 18);
}

对象类型、class在ts中也叫索引类型,对象可以动态添加属性,如果不知道会有什么属性,可以使用索引签名

interface MyPerson {[prop: string]: string | number;
}
const obj:MyPerson = {};
obj.name = 'shmily';
obj.age = 18;

3、枚举(Enum)

说明:一系列值的集合

enum API {a = "/api/a",b = "/api/b",c = "/api/c",d = "/api/d",
}const res = API.a; ///  /api/a

4、字面量类型

字面类型有两种,第一次为普通的字符串字面量例如'aaa',另一种为模板字面量比如 `#${string}`

他的意思是以#开头后面为任意的string类型

还有四种特殊的类型:void、never、any、unknown

  • never 为不可达,比如函数抛异常的时候,返回值就是 never。
  • void 为空,可以是 undefined 或 never。
  • any 为任意类型,任何类型都可以赋值给它,它也可以赋值给任何类型(除了 never)。
  • unknown 为未知类型,任何类型都可以赋值给它,但是它不可以赋值给别的类型。

5、keyof

type Person = {id: number;name: string;age: number;
};type P1 = keyof Person; //'id' | 'name' | 'age'

keyof操作符得到的是Person类型的所有键值类型即 'id','name''age' 三个字面量类型组成的联合类型'id' | 'name' | 'age'

6、in keyof

type Person = {id: number;name: string;age: number;
};type P1 = keyof Person; //'id' | 'name' | 'age'
type MyPick<T, K extends keyof T> = { [P in K]: T[P] };
type P3 = MyPick<Person, "id">;

说明:便利对象并拿到所有的键

  1. K extends keyof TK进行了约束,只能是'id','name','age'中的一个类型或者几个类型组成的联合类型;
  2. 如果没有这个约束,{ [P in K]: T[P] } 则会报错。
  3. 最后 我们传入的id可以拿到对应的类型 

试一试icon-default.png?t=N7T8https://tsplay.dev/wg3zvw

7、类型的装饰

ts类型系统还支持 添加 类型的属性   比如 可选、只读

interface MyPerson {readonly name: string; //只读age?: number;  //可选
}type tuple = [string, number?];

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2024-4-22 群讨论:微服务启动预热相关

以下来自本人拉的一个关于 Java 技术的讨论群。关注公众号&#xff1a;hashcon&#xff0c;私信进群拉你 Hotspot JVM 进程启动后&#xff0c;流量到来的时候 JIT 吃掉很多 CPU&#xff0c;如何观察到&#xff1f; 很多途径都能观察到&#xff1a; top -Hp&#xff1a;这个需…

MTK6775/MT6775/曦力P70联发科处理器性能参数资料

联发科MT6775(曦力P70)芯片搭载强大的Arm Cortex-A73/A53八核CPU&#xff0c;并采用台积电12纳米FinFET制程工艺&#xff0c;相较于其他14纳米级别产品&#xff0c;功耗节省达到了15%。此外&#xff0c;曦力P70还配备了高效能的Arm Mali-G72 GPU&#xff0c;相比上一代产品曦力…

Java——继承与组合

和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果。组合并没有涉及到特殊的语法 (诸如 extends 这样的关键字), 仅仅是将一个类的实例作为另外一个类的字段。 继承表示对象之间是is-a的关系&#xff0c;比如&#xff1a;狗是动物&#xff0c;猫是动…

YOLOv9训练结果分析->mAP、Precision、Recall、FPS、Confienc、混淆矩阵分析

简介 这篇博客&#xff0c;主要给大家讲解我们在训练yolov9时生成的结果文件中各个图片及其中指标的含义&#xff0c;帮助大家更深入的理解&#xff0c;以及我们在评估模型时和发表论文时主要关注的参数有那些。本文通过举例训练过程中的某一时间的结果来帮助大家理解&#xf…

动态规划——切割钢条问题

一、动态规划 动态规划算法通常用于解决最优化问题&#xff08;寻求最优解&#xff09;。其思想与分治法类似&#xff0c;将待求解的问题分成若干个子问题&#xff0c;先求出子问题&#xff0c;再根据子问题的解求出原来问题中的解&#xff0c;与分支法不同的是&#xff0c;在动…

【勒索病毒恢复】.svh勒索病毒介绍及恢复方案

一、.[[backupwaifu.club]].svh勒索病毒介绍 svh勒索病毒是一种恶意软件&#xff0c;它通过加密受害者的文件并要求支付赎金来解锁&#xff0c;从而达到勒索的目的。这种病毒已经存在了数年&#xff0c;并且不断演变&#xff0c;形成了多种不同的家族和变种。如果您的数据承载着…

Bentley二次开发教程02-开发环境搭建

1 Bentley 平台介绍 图 1 Bentley 平台介绍 Bentley 软件大致可分为四大平台&#xff0c;分别为用于设计的 Microstation 平台&#xff0c;用于协同的 ProjectWise 平台&#xff0c;用于对资产进行全生命周期管理的 AssetWise 平台和数据互联互通的 数字孪生平台 iTwin。 1.1 …

CyclicBarrier(循环屏障)源码解读与使用

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 什么是CyclicBarrier&#xff1f; 3. CyclicBarrier与CountDownL…

潜力与限制:低代码开发平台优缺点全面分析

低代码开发平台作为一种创新技术工具&#xff0c;正以其快速开发、低门槛参与和灵活定制等特性&#xff0c;重塑企业数字化转型之路。然而&#xff0c;任何技术都有其两面性&#xff0c;低代码平台也不例外。本文将深入探讨低代码开发平台的优缺点&#xff0c;并为您推荐值得信…

git常见命令(成长版)

ps&#xff1a;所谓成长版就是后续可能还会添加命令&#xff1a; 1.删除本地分支&#xff1a; git branch -d 分支名 2.拉取代码后默认master分支&#xff0c;切换到线上其他分支&#xff1a; &#xff08;1&#xff09;查看线上所有分支&#xff1a; git branch -a &#…

排序算法:顺序查找

简介 顺序查找&#xff08;也称为线性查找&#xff09;是一种简单直观的搜索算法。按照顺序逐个比较列表或数组中的元素&#xff0c;直到找到目标元素或搜索完整个列表。 应用场景 数据集比较小&#xff0c;无需使用复杂的算法。数据集没有排序&#xff0c;不能使用二分查找…

数栈+AI:数栈V6.2创新发布,让数据开发更智能

近日&#xff0c;以“DataAI&#xff0c;构建新质生产力”为主题的袋鼠云春季发布会圆满落幕&#xff0c;大会带来了一系列“AI”的数字化产品与最新行业沉淀&#xff0c;旨在将数据与AI紧密结合&#xff0c;打破传统的生产力边界&#xff0c;赋能企业实现更高质量、更高效率的…

C语言指针+-整数、指针-指针、指针关系运算、指针和数组、二级指针、指针数组

文章目录 前言一、指针 - 整数二、指针 - 指针三、指针的关系运算四、指针和数组五、二级指针六、指针数组指针数组可以将几个一维数组模拟成二维数组 总结 前言 C语言指针整数、指针-指针、指针关系运算、指针和数组、二级指针、指针数组等介绍&#xff0c;还包括指针数组将几…

【C++】---STL之vector的模拟实现

【C】---STL之vector的模拟实现 一、vector在源码中的结构&#xff1a;二、vector类的实现&#xff1a;1、vector的构造2、析构3、拷贝构造4、赋值运算符重载5、迭代器6、operator[ ]7、size()8、capacity()9、reserve()10、resize()11、empty()12、push_back()13、pop_back()1…

基于JAVA的机场航班起降与协调管理系统

毕业设计&#xff08;论文&#xff09;任务书 第1页 毕业设计&#xff08;论文&#xff09;题目&#xff1a; 基于JAVA的机场航班起降与协调管理系统 毕业设计&#xff08;论文&#xff09;要求及原始数据&#xff08;资料&#xff09;&#xff1a; 1&#xff0e;综述机场航班调…

JRebel热部署SpringBoot+MyBatis-Plus实现不重启更新修改后MyBatis的XML文件

安装JRebel热部署插件 《JRebel插件安装教程》 《JRebel mybatisPlus extension下载Zip离线安装》 在线安装JRebel mybatisPlus extension 插件商店直接搜JRebel mybatisPlus extension pom.xml 引入依赖 <dependency><groupId>com.baomidou</groupId>…

裤裤带你一起学C语言内存函数啦!

目录 1.memcpy的使用和模拟实现 2.memmove使用和模拟实现 3.memset函数的使用 4.memcmp函数的使用 内存函数在<string.h>库中&#xff0c;我们使用内存函数必须先引入<string.h>头文件 1.memcpy的使用和模拟实现 memcpy的函数原型如下&#xff1a; void * m…

大模型热潮下,AI数据集的重要性及发展现状

2023年3月14日&#xff0c;OpenAI发布了多模态大模型的最新版本GPT-4&#xff1a;文生视频大模型Sora&#xff0c;Sora通过采用更大规模的数据集进行训练,其推理能力超过了ChatGPT&#xff0c;已成为目前最成功、最受欢迎的大模型。 Sora的出现&#xff0c;打破了人们对AI技术…

sketchup{su}安装错误1402

错误如图 解决方法如下 打开autoremove&#xff0c;点击扩展&#xff0c;输入1402&#xff0c;点击搜索 等待修复成功既可尝试重新安装su 软件每周六选择其他方式登录免费使用

SCP收容物091~100

注 &#xff1a;此文接SCP收容物081~090,本文只供开玩笑 ,与steve_gqq_MC合作。 --------------------------------------------------------------------------------------------------------------------------------- 目录 scp-091 scp-092 scp-093 scp-094 scp-095…