TS学习笔记 类型标签 联合类型 枚举类型 泛型 类型别名

news2025/8/11 12:17:25

个人理解总结:

  • js天生没有编译和类型检查的束缚 灵活好上手 结合项目使用时也可以做到热更新提升开发体验。
    (需要编译的JAVA以前开发DEBUG很麻烦但现在有了容器编排技术,也可以实现类似效果)

  • TS是JS的超集,添加了类型标注,不能直接在浏览器或Node中运行(Deno可以支持),其他情况都需要TSC转译为JS后执行。npm install tsc -g

  • TS可以提升代码的健壮性,可维护性,可扩展性与可读性

  • 变量添加类型标注let i:number
    参数添加类型标注function F(a:number){}
    可选参数function F(b?:number){}
    函数返回值类型标注function F():number{}

  • 联合类型let i:number|string;
    枚举类型let i:1|2|3
    类型别名type numStr = number|string;function F(userId:numStr){};

  • 泛型 传递给函数的类型占位符 调用函数时将实际指定的参数类型链式传递给参数类型和返回值类型
    function identity<T,U>(value:T ,message:U):T{ return value }; identity<number,string>(68,'跳动的世界线');

  • 回调函数function F(callback:(data:string)=>void){}

  • 抽象继承封装多态待补全…

代码实例:

JS写法

//在JS中合法  JS中的变量和函数类型都是动态的  可以隐式转换  
function multiply(a,b){
	return a*b;//这里在执行中会将'1'隐式转换为1
}
multiply('1',2)

TS添加类型标注

//在TS中添加参数类型标签  不加时默认是any  此时TS不进行类型检查
function multiply(a:number,b:number){
	return a*b;
}
multiply('1',2)//TS中这里不符合语法规范  就会在运行前报错  提前发现错误

在这里插入图片描述
TS可选参数

function multiply1(a:number,b?:number){//添加? TS识别为参数可选 空参默认传undefined
	if(b==undefined) b=1 //
	return a*b;
}

TS函数返回值添加类型标注

function multiply2(a:number,b?:number):number{//添加函数返回值类型标签  无返回值时标记为void
	if(b==undefined) b=1 //
	return a*b;
}

TS类型推导 变量初值和固定类型函数返回值的情况下 不用手动添加类型 TS会自动推导

let i:number = 1
let str:string = '你好'

let i = 1
let str= '你好'

数组与元组

// 定义数组
let arr:number[];
let arrOfArry:number[][];
// 定义元组  类似数组  但元素个数与类型确定
let point:[number,number,number]
point = [1,2,3]

在这里插入图片描述

联合类型

let color:number|string;
color = 'red';
color = 0x111;

在这里插入图片描述
类型别名

type numStr = number|string;
function F(userId:numStr){};

枚举类型 限制变量取值

let gender:'male'|'female'
let dice:1|2|3|4|5

gender = 'male'
gender = 'female'
dice = 1
dice = 2

在这里插入图片描述

接口 定义接口创建的对象缺少或多出属性都会报错

interface User{
    name:string
    id:number
}
let user:User = {
    name:'222',
    id:111,
}

**函数 限制函数必须有特定参数和返回值,多用于回调函数 **


function getUserName(callback:(data:string)=>void){//限制回调函数没有返回值且参数必须为string
    // ...
}
getUserName((data)=>{
    alert(data);
})

在这里插入图片描述
泛型 泛型变量是传递给函数的类型占位符 调用函数时将实际指定的参数类型链式传递给参数类型和返回值类型

//T U为泛型变量,它是传递给identity函数的类型占位符
function identity<T,U>(value:T ,message:U):T{
    return value
}
identity<number,string>(68,'跳动的世界线')

T (Type) 表示类型;
K (Key) 表示对象中键的类型;
V (Value) 表示对象中值的类型;
E (Element) 表示元素类型。

tsconfig.json配置

{
	"compilerOptions":{
		"watch":true.
		"removeComments":true.
		"target":"es6".
		"noImplicitAny":true.
		"strictNullChecks":true.//不允许给任意类型变量赋null undefined
	}
}

类型定义扩展包 第三方插件添加完善的类型支持

npm install three --save
npm install @types/three --save

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

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

相关文章

vulnhub靶机corrosion1

靶机下载地址&#xff1a;Corrosion: 1 ~ VulnHub Kail IP&#xff1a;192.168.174.128 Corrosion ip&#xff1a;192.168.174.133 思路&#xff1a; 靶机端口扫描&#xff0c;ssh日志反弹shell&#xff0c;linpeas脚本扫描&#xff0c;备份文件发现密码&#xff0c;爆破zi…

医疗器械设计时需要注意的事项

伴随着医疗器械的增加&#xff0c;经市场评估的医疗器械产品也趋向多样化&#xff0c;医疗器械设计也非常重要&#xff0c;下面小编就带大家了解一下开展医疗器械设计时需要注意什么? 说到医疗器械&#xff0c;相信大家都很熟悉。医疗器械有很多种&#xff0c;包括一类医疗器械…

【C++位图】1. 快速查找某个数据是否在一个集合中 2. 排序(全部插入,遍历一遍) 3. 求两个集合的交集、并集等

目录 问题&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。 2.简单实现一个位图 3.如何利用位图求两个集合的交集、并集 问题&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序…

Golang入门笔记(14)—— 错误处理

来一个除以0的异常&#xff0c;代码如下&#xff1a; package mainimport "fmt"func main() {fmt.Println("before")divNum()fmt.Println("after") }func divNum() {num1 : 10num2 : 0result : num1 / num2fmt.Println(result) } console 异常&…

GitHub 昙花一现:《Spring Boot 趣味实战》神作开源几分钟被下架

又来给大家分享好书了&#xff1a;刘水镜老师的 Spring Boot 趣味实战&#xff0c;网上依旧是没有开源版本&#xff01;文末送上 刘水镜是谁&#xff1f; 十余年持续技术文章输出&#xff0c;CSDN 博客专家。2020 年《 Spring Boot 趣味私房课》专栏上线&#xff0c;凭借风趣…

创新案例|巴黎欧莱雅如何以内容+货架双轮驱动全渠道兴趣电商增长飞轮

对巴黎欧莱雅而言&#xff0c;兴趣电商作为内容场景为核心的平台&#xff0c;但货架场景已成为驱动增长的飞轮。巴黎欧莱雅团队注意到&#xff0c;抖音用户不只是被动地接受信息流推送&#xff0c;而是越来越倾向于主动搜索。消费者行为的重大变革意味着消费者不再满足于货找人…

【MFC】初识MFC(8)

MFC简介 微软提供的一个类库&#xff08;Class Libraries&#xff09;&#xff0c;封装了Windows的API&#xff0c;并且包含一个应用程序框架。 1、MFC是对前面窗口编程所用到的API进行封装&#xff0c;在Windows C基础上引入了C面向对象的思想&#xff0c;简单而言就是把API…

【论文翻译】2.5PC:一个更快的非阻塞原子提交协议

2.5-PC: A Faster and Non-Blocking Atomic Commit Protocol 目录1 介绍2 相关工作3 原子承诺和 3PC 概述4 为什么 3PC 是非阻塞的&#xff1f;5 2.5 PC6 2.5 PC 的非正式证明7 确认信息8 2.5 PC 机器证明参考摘要&#xff1a;我们提出 2.5PC&#xff0c;一种非阻塞原子提交协…

DNS与网站访问流程

1&#xff1a;dns与网址url简介 DNS是域名系统(DomainNameSystem)的缩写&#xff0c;域名系统是一中庞大而复杂的系统&#xff0c;但我们这里讲解重心并不是这个系统&#xff0c;而是指本地电脑dns是什么 讲到dns&#xff0c;我们就不得不讲讲网址和域名&#xff0c;我们经常会…

linux杀死进程的五种方法(kill)

添加链接描述 相关博主的链接&#xff1b; 方法一&#xff1a;通过kill 进程id的方式可以实现 首先需要知道进程id, 例如,想要杀死firefox的进程,通过 ps -ef|grep firefox,可以查到firefox的进程id: 然后通过 kill 3781 就可以关闭进程了. 补充: kill -9 来强制终止退出, 例…

16.一篇文章学会django模型的使用

1.django模型简单示例 1.1 创建django项目 创建完项目&#xff0c;还需要创建django子项目 django-admin startproject model_study cd .\model_study\ python manage.py startapp model_app1.2配置应用 将模型对应的应用程序&#xff08;刚刚创建的子应用&#xff09;添加…

CentOS 7 Jenkins配置及SpringBoot项目自动部署

1.下载Jenkins 下载地址:War Jenkins Packages 运行Jenkins之前确保系统已经安装好JDK&#xff0c;因为我安装的是JDK1.8,所以选择2.346.1 这个版本 2.启动jenkins 将下载好的jenkins.war上传到服务器上,我的目录是/home/jenkins 启动命令 java -jar jenkins.war --httpPo…

万字详文:TCP 拥塞控制详解

本文主要介绍 TCP 拥塞控制算法&#xff0c;内容多来自网上各个大佬的博客及《TCP/IP 详解》一书&#xff0c;在此基础上进行梳理总结&#xff0c;与大家分享。因水平有限&#xff0c;内容多有不足之处&#xff0c; 敬请谅解。一、TCP 首部格式 在了解 TCP 的拥塞控制之前&…

多向思考者--高敏感人群的内心世界

工作以后很少看心理学的书&#xff0c;因为心理学书给我的印象是&#xff1a;国外翻译的很啰嗦&#xff0c;国内的太鸡汤&#xff0c;看的时候能有感触&#xff0c;看完以后就都忘记了。阅读心理学的书籍&#xff0c;更多的是跟着书中的内容和自己对话。看完《多向思考者》这本…

SpringMVC使用(二)

1. 统一异常处理 SpringMVC提供了统一处理Controller层抛出的异常的方法 1.1 统一异常处理案例 RestController的统一异常处理 package com.lan.controller;import com.lan.exception.BusinessException; import com.lan.exception.SystemException; import org.springfram…

DolphinDB Kafka 插件介绍

1. DolphinDB Kafka 插件介绍 DolphinDB Kafka 插件支持把 DolphinDB 中生产的数据推送到 Kafka&#xff0c;也支持从 Kafka 订阅数据&#xff0c;并在 DolphinDB 中消费。用户可以在 DolphinDB 中实例化 Producer 对象&#xff0c;把 DolphinDB 中的数据同步到 Kafka 中指定的…

LeetCode | 218. 天际线问题

城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度&#xff0c;请返回由这些建筑物形成的天际线 。 每个建筑物的几何信息由数组 buildings 表示&#xff0c;其中三元组 buildings[i] [lefti, righti, heighti] 表示&#xff1a;…

Egg如何实现文件上传

文件上传是开发中不可避免的一项。那么在没有单独的资源服务器的时候&#xff0c;上传的文件可能要放在我们的项目文件夹服务器上&#xff0c;我们如何实现文件上传呢&#xff1f; 首先不用想&#xff0c;我们需要一个测试页面。html用来上传文件。如下&#xff1a; <!DOCT…

D. Minimal Height Tree(如何BFS遍历序列使树的高度最小)

Problem - 1437D - Codeforces Monocarp有一棵由n个顶点组成的树&#xff0c;它的根在顶点1。他决定研究BFS&#xff08;宽度优先搜索&#xff09;&#xff0c;所以他在他的树上运行BFS&#xff0c;从根开始。BFS可以用下面的伪代码来描述。 a [] # 顶点被处理的顺序 q Queu…

mdr1基因寡核苷酸/酸敏感靶多肽/聚乙二醇埃博霉素B偶联阿霉素的相关制备

小编这里整理了mdr1基因寡核苷酸/酸敏感靶多肽/聚乙二醇埃博霉素B偶联阿霉素的相关内容&#xff0c;一起来看&#xff01; 聚乙二醇埃博霉素B偶联阿霉素相关研究&#xff1a; 阿霉素与酰肼聚乙二醇羧基在磷酸的作用下反应制得阿霉素聚乙二醇羧基中间体,其中阿霉素与磷酸的摩尔比…