TypeScript(一):TypeScript基本理解

news2025/3/13 15:28:26

TypeScript基本理解

为什么使用TS

  • JavaScript发展至今,没有进行数据类型的验证
  • 而我们知道,在编程阶段,错误发现的越早越好
  • 而TS就解决了JS的这个问题

认识TypeScript

  • TypeScript是拥有类型的JavaScript超级,它可以编译成普通、干净。完整的JavaScript代码
  • 我们可以将TypeScript理解成为 加强版的JavaScript
  • **JavaScript拥有的特性,TypeScript全部都是支持的,**并且,紧随着ECMAScript的标准
  • Typescript在 实现新特性的同时,总是保持和ES标准的同步甚至领先
  • TypeScript最终会被编译成JavaScript代码

TypeScript特点

  • 始于JavaScript,归于JavaScript
  • TypeScript是一个强大的工具,用于构建大型项目
  • 拥有先进的JavaScript

TypeScript的编译环境

  • 前面我们知道TS最终会转成JS代码的
  • 那么TS代码运行也需要响应的环境
  • npm install typescript -g全局安装TypeScript代码运行环境
  • 创建 index.ts文件
//let 变量名称:变量类型 = 
//String:大写的是JavaScript中的包装类,new String()
//string:小写的是TypeScript定义变量的类型
let message: string = "123"
console.log(message)
  • 而后通过 tsc index.ts将ts文件编译成js文件,进行使用

TypeScript的运行环境

  • 若每次使用 tsc命令,将ts转成js,比较麻烦
  • 我们也可以使用ts-node直接运行
  • 使用ts-node需要全局安装两个包
    • npm install ts-node -g
    • npm install tslib @type/node -g
  • 而后运行 ts-node index.ts即可

变量定义

  • 上面的例子中,我们对变量定义进行了说明
//   let/const 变量名称:数据类型(类型注解) = 赋值
let message:string = "hello"  //string就是类型注解

变量的类型推导(推断)

  • 在实际书写过程中,我们无需为每一个变量,指定数据类型
  • 因为 TypeScript会根据赋值的内容,自动推导出变量的类型
let message = "hello"

image.png

  • 而const声明的变量,则是 字面量类型
const message:"hello" = "hello"
const num:1.88 = 1.88

image.png

image.png

JavaScript和TypeScript的数据类型

  • TypeScript是JavaScript的一个超集
    • JS拥有的特性TS全部拥有

image.png

JavaScript类型-number类型

  • 数字类型是开发中经常用到的类型,不区分整数型和浮点数类型
let num:number = 1.88

JavaScript类型-boolean类型

let flag:boolean = true

JavaScript类型-string类型

let str:string = "hello"

JavaScript类型-Array类型

  • 明确指定<数组>的类型注解

    • 1.string[]:数组类型,并且数组中存放的字符串类型
    let names:string[] = ['1','2']
    
    • 2.Array与上述表述的一致,只是另外一种写法
    let num:Array<number> = [1,2,3]
    

JavaScript类型-Object类型

//类型注解,要和实际的内容相对应,否则就会报错
let obj:{
    name:string,
    age:number
} = {
    name:"zhangcheng",
    age:18
}
  • 但是不能写成以下写法
    • 下面的写法相当于是一个空对象,在后续的操作中,都会报错
let obj:object = {
    name:"zhangcheng"
}

JavaScript类型-null和undefined类型

let n: null = null
let unde:undefined = undefined

函数的类型

函数的参数类型
  • 在定义函数的时候,对于传入的参数,我们可以指定传入参数的类型
  • 同时参数的个数也会限制死
function sum(num1:number,num2:number){}
函数的返回值类型
  • 通常情况下,是不用对函数的返回值进行类型的注解,因为会自动推导出来
  • 但是明确的写明类型注解,会有助于代码的阅读性
    • 通常在小括号最后对函数的返回值进行类型注解
function sum(num1:number,num2:number):number{}
匿名函数的参数
  • 针对于匿名函数,会根据上下文自动推导出参数的类型,不需要特别的去指定
let arr = ["zhangsan","lisi"]
arr.forEach((item,index,arr)=>{})
//item,index,arr属于上下文类型,不需要特殊的指定
对象类型与函数类型联合使用
//参数名称:{属性1:类型注解,属性2:类型注解,....}
function printPoint(ponit: { x: number, y: number }) {
    console.log(ponit.x,ponit.y);
}

//传入参数的时候,一定要包含设定好的属性
printPoint({x:100,y:200})
  • 同时,有另外一种写法
type ponitType = {
    x: number
    y: number
    //z表示可选属性,可以传入,可以不传入
    z?:number
}

//参数名称:{属性1:类型注解,属性2:类型注解,....}
function printPoint(ponit: ponitType) {
    console.log(ponit.x,ponit.y);
}

//传入参数的时候,一定要包含设定好的属性
printPoint({x:100,y:200})

TypeScript类型-any类型

  • 在某些情况下,我们无法确定一个变量的类型,并且这个变量的类型可能会发生变化,可以使用any类型
  • 对于 any类型的变量,我们可以对变量赋值任何值
let a:any = "why"
a = 123
  • 一般在数据类型十分复杂的时候,我们可以使用any类型,但是不推荐到处使用any,也不推荐不使用any

TypeScript类型-unknown类型

  • unknown是TypeScript中比较特殊的类型

  • unknown类型的变量,做所有的操作前都是不合法的

    • 因此在做操作前,需要进行类型校验 称类型缩小
let str: unknown = "123456"

//直接取length会报错
// console.log(str.length);

//需要进行类型校验
if (typeof str === "string") {
    console.log(str.length)
}
  • any类型的区别
    • any类型,做所有的操作都是合法的,无需进行类型的校验
    • 而unknown类型,做所有的操作都是非法的,需要进行类型的校验

TypeScript类型-void类型

  • void通常用来指定一个函数是没有返回值的,就是void类型
  • 在TS中如果一个函数没有任何的返回值,那么返回值的类型就是void类型
    • 而js不返回任何东西,默认返回的就是undefined类型
  • 应用场景
    • 用于指定函数返回值类型是void类型
    • 同时,可以指定传入的参数是函数类型
//指定一个变量是函数 let foo:()=>void = () => {}
function delayFn(fn: () => void) {
    setTimeout(() => {
        fn()
    },1000)
}

delayFn(() => {
    console.log(123);
})

TypeScript类型-never类型

  • 开发中很少实际去定义 never类型,通常是根据上下文自动推导出来的 never类型
//情况一不会自己定义never类型,通常是自动推导出来的
//1.死循环
function foo(): never {
    while (true) {
        console.log(123)
    }
}
foo()

//2.函数返回值是空的情况
function foo1() {
    return []
}
  • 在开发框架或者工具的时候,可能会用到never
function changeMessage(message: string | number) {
    switch (typeof message) {
        case "string":
            console.log(message.length)
            break
        case "number":
            console.log(message);
            break
        default:
            //正常来说永远不会执行到default中的代码
            const check:never = message 
    }
}

changeMessage(123)

//但有一天某个人对工具函数进行了更改,增加了一种boolean的情况,且没有考虑boolean的case,则default就会提示报错,让开发者能够看到问题
  • nerver表示永远不会发生值的类型,不能接受任何值

TypeScript类型-tuple类型

  • 元组类型
  • 数组类型十分相似,但是也有区别
    • **数组类型:**里面存放的数据要保持类型统一,虽然可以不统一,但是取值的时候,不能明确类型
    • 元组类型:可以存放不同的数据类型,且可以通过下标进行取值,取出来的值的类型是明确的
//数组的定义方法 类型[]
let arr: (string | number)[] = [123, "123"]

//元组的定义方法 [类型1,类型2]
let tuple: [string, number, boolean] = ["123", 123, true]
console.log(tuple[0]);

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

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

相关文章

OpenAI发布Sora模型,可根据文字生成逼真AI视频

早在2022年11月30日&#xff0c;OpenAI第一次发布人工智能聊天机器人ChatGPT&#xff0c;随后在全世界掀起了人工智能狂潮&#xff0c;颠覆了一个又一个行业。在过去的一年多的时间里&#xff0c;chatGPT的强大功能改变了越来越多人的工作和生活方式&#xff0c;成为了世界上用…

达梦数据库——数据迁移sqlserver-dm报错问题整理

报错情况一&#xff1a;Sql server迁移达梦连接报错’驱动程序无法通过使用安全套接字Q层(SSL)加密与SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferencesITLS127‘ 原因&#xff1a;历史版本的SOL SERVER服务…

防御保护第五次作业

1,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) FW5&#xff1a; 2,分公司设备可以通过总公司的移动链路和电信链路访问到DMz区的http服务器 FW5&#xff1a; 注&#xff1a;记得通过安全策略放行 分公司FW3 注意&#xff1a…

用300万支电动牙刷发起DDoS攻击?假的!

近日国外“300万支电动牙刷被用于DDoS攻击”的安全事件引发广泛讨论。国外媒体发文称“300万支电动牙刷被黑客用恶意软件感染&#xff0c;以执行分布式拒绝服务&#xff08;DDoS&#xff09;攻击。”经Fortinet与媒体确认&#xff0c;这是一起虚假的新闻。 上周&#xff0c;瑞士…

【网络编程】ZeroMQ的网络通信

文章目录 1、概述2、通信效果2.1、Request-Reply&#xff08;请求-响应模式&#xff09;2.2、Publish-Subscribe&#xff08;订阅-发布模式&#xff09; 3、方式选择3.1、准备用 Visual Studio-C 方式3.1.1、找到 Builds 文件夹3.1.2、查看 deprecated-msvc 下的 libzmq.sln 文…

图像像素读写image.at、image.ptr、指针

image.at 在OpenCV中&#xff0c;使用Mat对象表示图像数据&#xff0c;在使用at方法时&#xff0c;需要确保使用正确的数据类型&#xff08;如uchar或Vec3b&#xff09;&#xff0c;这取决于图像的通道数和数据深度。 单通道图像 对于单通道图像&#xff08;如灰度图像&…

正信晟锦:借钱后不还算诈骗吗

在探讨“借钱后不还”这一行为是否构成诈骗时&#xff0c;我们应首先明确诈骗的法律定义。根据《中华人民共和国刑法》&#xff0c;诈骗是指以非法占有为目的&#xff0c;采用虚构事实或隐瞒真相的手段&#xff0c;骗取他人财物的行为。关键在于是否存在欺诈行为和非法占有的主…

12.QT文件对话框 文件的弹窗选择-QFileDialog

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面 2.信号槽 3.其他函数 参考&#xff1a; 前言&#xff1a; 通过按钮实现文件弹窗选择以及关联的操作 效果图就和平时用电脑弹出的选文件对话框一样 技能&#xff1a; QString filename QFileDialog::ge…

消毒柜行业分析:市场渗透率不足20%

目前消毒柜仍然属于“小众”品类&#xff0c;疫情前期市场渗透率也不足20%。有业内人士表示&#xff0c;多年来消毒柜零售量规模基本在400万台左右徘徊&#xff0c;这个角度看&#xff0c;消毒柜是具有自身的产品消费人群的&#xff0c;其市场相对稳定&#xff0c;而且消毒柜的…

【Java EE初阶十六】网络原理(一)

在网络原理中主要学习TCP/IP四层模型中的重点网络协议 1. 应用层 1.1 应用程序与协议 应用层是和程序员接触最密切的&#xff1b; 应用程序&#xff1a;在应用层这里&#xff0c;很多时候都是程序员自定义应用层协议&#xff08;步骤&#xff1a;1、根据需求&#xff0c;明确…

前端工程化面试题 | 14.精选前端工程化高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

2974. 最小数字游戏【简单】

2974. 最小数字游戏 题目描述&#xff1a; 你有一个下标从 0 开始、长度为 偶数 的整数数组 nums &#xff0c;同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏&#xff0c;游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下&#xff1a; 每一轮&#xf…

001kafka源码项目gradle报错UnsupportedClassVersionError-kafka-报错-大数据学习

1 报错提示 java.lang.UnsupportedClassVersionError: org/eclipse/jgit/lib/AnyObjectId has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 如…

AI:131- 法律文件图像中的隐含信息挖掘与敲诈勒索检测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

2024最全的性能测试种类介绍,这6个种类特别重要!

系统的性能是一个很大的概念&#xff0c;覆盖面非常广泛&#xff0c;包括执行效率、资源占用、系统稳定性、安全性、兼容性、可靠性、可扩展性等&#xff0c;性能测试就是描述测试对象与性能相关的特征并对其进行评价而实施的一类测试。 性能测试是一个统称&#xff0c;它其实包…

Nginx高级课程扩容(四)

Brotli 安装 ● 官网 ● https://github.com/google/ngx_brotli ● https://codeload.github.com/google/brotli/tar.gz/refs/tags/v1.0.9 ● 下载 两个项目 ● 解压缩模块化编译 ./configure --with-compat --add-dynamic-module/root/ngx_brotli-1.0.0rc --prefix/usr/local…

[嵌入式系统-28]:开源的虚拟机监视器和仿真器:QEMU(Quick EMUlator)与VirtualBox、VMware Workstation的比较

目录 一、QEMU概述 1.1 QEMU架构 1.2 QEMU概述 1.3 什么时候需要QEMU 1.4 QEMU两种操作模式 1.5 QEMU模拟多种CPU架构 二、QEMU与其他虚拟机的比较 2.1 常见的虚拟化技术 2.1 Linux KVM 2.2 Windows VirtualBox 2.3 Windows VMware workstation 三、VirtualBox、VM…

【Java程序员面试专栏 Java领域】Java集合 核心面试指引

关于Java 集合部分的核心知识进行一网打尽,主要包括Java各类集合以及Java的HashMap底层原理,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 集合基本概念和比较 关于集合的基本分类和知识 Java集合有哪些种类 Java 集合, 也叫作容器…

leetcode hot100 打家劫舍

本题中&#xff0c;依旧可以发现&#xff0c;当前位置的金额受到前两个位置金额是否被偷的影响&#xff0c;所以这明显是动态规划的问题。 我们采用动态规划五部曲来进行做 首先我们确定dp数组的含义&#xff1a;考虑下标i&#xff08;包括i&#xff09;以内的房屋&#xff0…

3秒开服《幻兽帕鲁》!如何抓住游戏背后的云计算机遇?

导语 | 2024 年伊始&#xff0c;《幻兽帕鲁》的火热就为新一年的游戏市场带来了极高的热度&#xff0c;无论是超千万份的销量还是关于游戏“缝合”与“借鉴”的争议&#xff0c;都使得开年游戏市场的销售前景与话题度拉满。而在游戏市场之外&#xff0c;云服务市场尤其是其面向…