无废话版的TypeScript(TS)教程可以满足日常项目使用

中文官网

在中文网(官网也可以)点击立即试用->在浏览器中运行->在这里可以演示本篇博客内的内容

在这个页面右边点击js就是ts编译后的js内容,也可以点击左上角进行版本设置和一些配置,这个看个人意愿,我本人打开网站直接用了

类型推断

不加类型时,TS会进行类型推断,以默认赋值的值类型作为变量类型,如下默认赋值为String类型的数据,因此再次赋值为number类型则会报错

let str = 'abc'
str = 10

类型注解

相比较类型推断,类型注解本质就是给变量加个类型限制,这样就会把原有的默认的类型推断给覆盖使用我们定义的类型,如下

// let str: string = 'abc'// 或者可以初始不给值
let str :string
str = 'abc'

类型断言

如下代码

let arr = [1, 2, 3]
const result = arr.find(item => item > 2)
result * 5

这里可以发现我们得到的值肯定是3的,但是ts不知道,它会以为有undefined情况,所以这里报错了,因此这里我们要告诉ts这个会得到值并且是number类型的,因此代码改造如下:

let arr = [1, 2, 3]
const result = arr.find(item => item > 2) as number
let a = result * 5
console.log(a)

这样声明后就是相当于告诉ts返回值是number类型,这样就能过了ts的编译,但实际在运行中即使值为undefined也不会有问题

基础类型和联合类型

// 基础类型
let v0: any = 'abc' // 任意类型
let v1: string = 'abc'
let v2: number = 123
let v3: boolean = true
let nu: null = null
let un: undefined = undefined// 联合类型
let v4: string | null = null
v4 = '1234'
// v4 = 1234 // 报错,number类型不在联合类型范围之内let v5: 1 | 2 | 3 = 1
v5 = 2
v5 = 3
// v5 = 4 // 报错,4不在限制的联合类型范围之内

数组元祖和枚举

// 数组
let arr:number[] = [1, 2, 3] // 限制数组内容为数字类型
let arr2:Array<number> = [1, 2, 3]  // 限制数组内容为数字类型let arr3:string[] = ['1', '2', '3'] // 限制数组内容为字符串类型
let arr4:Array<string> = ['1', '2', '3']  // 限制数组内容为字符串类型// 元组
// 元组可以限制数组类型和数组个数,类似数组结构
let t1: [number, string, number] = [1, '2', 3]
// t1[0] = '1' // 报错,元组第一个数值限定了number类型,不能赋值为string类型// ?设置可选
let t2: [number, string?, number?] = [1] // 这样后面两个值写不写都行,为可选值// 枚举
enum MyEnum {A,B,C
}
console.log('MyEnum.A',MyEnum.A) // 0
console.log('MyEnum[0]',MyEnum[0]) // "A"

函数

// 设置返回值类型为void代表不需要返回值
function MyFn1(a: number, b: number): void {console.log(a + b)
}// 设置返回值类型为number
function MyFn2(a: number, b: number): number {return a + b
}// 使用?设置可选参数,建议必选参数放到可选参数前面
function MyFn3(a: number, b?: number): number {// return a+b // 直接写a+b会报错,因为b是可选参数,ts不确定有没有传入bif (b) {return a + b}return a
}// 设置默认值
function MyFn4(a: number = 10): void {console.log(a) // 10
}
MyFn4()// 获取剩余参数
function MyFn5(a: number, ...rest: number[]): void {console.log('a',a) // 1console.log('rest',rest) // [2, 3, 4, 5]
}
MyFn5(1,2,3,4,5)

接口

interface Obj {name:string,age:number
}const obj:Obj = {name:'萧寂', age:10
}

类型别名

type MyUserName = string | numberlet a: MyUserName = 10 // a可以为number也可以为string
a = 'hello'

泛型

function myFn(a: number, b: number): number[] {return [a, b]
}// 如果上面的函数为通用型函数的话,就不能写死类型了,可以使用泛型传入类型,如下
function myFn1<T>(a: T, b: T): T[] {return [a, b]
}let m = myFn1<number>(1, 2)
console.log('m',m)
let m2 = myFn1<string>('A', 'B')
console.log('m2',m2)

收尾

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

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

相关文章

源代码防泄密如何做?10种方法教你源代码防泄密

企业如何正确做好源代码防泄密工作&#xff1f;推荐10种方法教你源代码防泄密。1. 使用加密技术 强加密算法&#xff1a;使用AES、RSA等强加密算法对源代码进行加密&#xff0c;确保只有授权用户才能解密和访问源代码。 2. 代码混淆 混淆工具&#xff1a;使用ProGuard、Obfusc…

Ubuntu使用cat替代vim编写文件

docker创建容器&#xff0c;进入容器之后无法使用vi&#xff0c;vim&#xff0c;gedit apt update时报错&#xff0c;无法安装指令&#xff0c;sources.list无法编辑 使用cat编辑文件 rootabcd:/# cat >文件名 << EOF > 内容 > EOF编写文件时加上EOF&#xff0c…

六西格玛培训公司:解锁成功之门,让企业与个人共赴“嗨”途

在竞争激烈的21世纪&#xff0c;六西格玛培训公司手握一把神奇的钥匙&#xff0c;帮助企业及个人轻松开启成功的大门。 对企业来说&#xff1a; 产品质量飞跃&#xff1a;不再是偶尔的精品&#xff0c;而是每个产品都如同精雕细琢的艺术品&#xff0c;吸引无数顾客争相购买。…

【Python】 异步编程

【Python】 异步编程 1. nest_asyncio基础定义2. nest_asyncio 举例实现基本用法 1. nest_asyncio基础定义 nest_asyncio.apply() 是 Python 编程中与异步编程相关的一个调用&#xff0c;它用于解决某些特定环境下的异步编程问题。下面是对这个调用的详细解释&#xff1a; nes…

【微信小程序 笔记】

协同工作和发布 - 协同工作 了解权限管理需求 在中大型的公司里&#xff0c;人员的分工非常仔细&#xff1a;同一个小程序项目&#xff0c;一般会有不同岗位、不同角色的员工同时参与设计与开发。 此时出于管理需要&#xff0c;我们迫切需要对不同岗位、不同角色的员工的权限进…

web3.0链游农民世界开发搭建0撸狼人杀玩法模式定制开发

随着区块链技术的飞速发展&#xff0c;Web3.0时代的链游已成为游戏行业的新宠。本文将介绍一款基于Web3.0的链游——农民世界&#xff0c;如何定制开发0撸狼人杀玩法模式&#xff0c;以及该模式的专业性、深度思考和逻辑性。 一、背景介绍 农民世界是一款以农业为主题的链游…

嵌入式系统基础

嵌入式系统基础主要包括以下几个方面&#xff1a; 1、定义&#xff1a; 嵌入式系统是以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它由硬件和软件组成&#xff0…

css 修改 input range 样式

这段必须要加上&#xff0c;清除默认样式,根据mdn文档介绍&#xff0c;这个样式兼容性不太好&#xff0c;应该多看看目标用户的浏览器支不支持。 -webkit-appearance: none; -moz-appearance: none; appearance: none; input[typerange]{-webkit-appearance: none;width:90px;h…

.NET 通过UserInit键实现Windows权限维持

01阅读须知 此文所节选自小报童《.NET 内网实战攻防》专栏&#xff0c;主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧&#xff0c;对内网和后渗透感兴趣的朋友们可以订阅该电子报刊&#xff0c;解锁更多的报刊内容。 02基本介绍 本文内容部分节选自小报童…

Spring Boot 学习第七天:动态代理机制与Spring AOP

1 概述 在Java的世界中&#xff0c;实现AOP的主流方式是采用动态代理机制&#xff0c;这点对于Spring AOP也一样。代理机制的主要目的就是为其他对象提供一种dialing以控制对当前对象的访问&#xff0c;用于消除或缓解直接访问对象带来的问题。通过这种手段&#xff0c;一个对象…

EEPROM与FLASH

一、EEPROM介绍 1.概念 EEPROM简介&#xff0c;EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息&#xff0c;重新编程。一般用在即插即用&…

【Bugku CTF】web解题记录

记录我在Bugku CTF靶场中做的比赛真题&#xff0c;便于自己以后的复习 1.my-first-sqli 进入此关卡&#xff0c;发现参数有username和password 我们尝试在username上注入数字型、字符型参数&#xff0c;后面发现注入字符型的单引号的有报错语句&#xff0c;我们在username上注…

【服务器08】之【游戏框架】之【加载主角】

首先简单了解一下帧率 FixedUpdate( ) > Update( ) > LateUpdate( ) 首先FixedUpdate的设置值 默认一秒运行50次 虽然默认是0.02秒&#xff0c;但FiexedUpdate并不是真的0.02秒调用一次&#xff0c;因为在脚本的生命周期内&#xff0c;FixedUpdate有一个小循环&…

大学计算机

项目一 了解计算机 1.1 了解计算机的诞生及发展阶段 1.2 认识计算机的特点、应用和分类 1&#xff0e;计算机的特点 1. 计算机的特点 2.计算机的应用 3.计算机的分类 4.数量单位 1.3 了解计算机操作系统的概念、功能与种类 1.操作系统概念 2.操作系统的作用 1&#xff0e…

主流的RAG框架

Rank1、LangChain(86k stars) https://github.com/langchain-ai/langchain/.当之无愧的霸主&#xff0c;范围很全面&#xff0c;但代码 Rank2、Quivr(33.4k stars) https://github.com/StanGirard/quivr Rank3、Llamalndex(32.1k stars) https://github.com/run-llama/llama…

MySQL数据库锁的实现原理

MySQL数据库的锁实现原理主要涉及到如何确保在多用户并发访问数据库时,保证数据的完整性和一致性。以下是MySQL数据库锁实现原理的详细解释: 锁的基本概念和目的 锁的概念:在数据库中,锁是用于管理对公共资源的并发控制的机制。当多个用户或事务试图同时访问或修改同一数…

Java零基础-集合:Set

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

感应电机转差速度估算

在感应电机矢量控制中&#xff0c;需要计算出感应电机的机械转差速度&#xff08;同步速度和转子速度之间的差&#xff09;。以下方程描述了感应电机磁场定向控制 (FOC) 中转差速度值的关系&#xff1a; 如果我们保持转子磁通恒定&#xff0c;并且 d 轴与转子磁通参考系对齐&am…

MFC时间获取与高精度计算

文章目录 MFC获取系统当前时间CTimeGetLocalTime 获取程序运行时间GetTickCount() MFC 获取系统当前时间 CTime CTime tm; tmCTime::GetCurrentTime();    int m_nYear tm.GetYear(); ///年 CString m_strTime tm.Format("%Y-%m-%d %H:%M:%S");GetLocalTime …

基于Java医院门诊互联电子病历管理信息系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…