当前位置: 首页 > news >正文

TypeScript(一):TypeScript基本理解

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: numbery: 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)breakcase "number":console.log(message);breakdefault://正常来说永远不会执行到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]);

相关文章:

TypeScript(一):TypeScript基本理解

TypeScript基本理解 为什么使用TS JavaScript发展至今&#xff0c;没有进行数据类型的验证而我们知道&#xff0c;在编程阶段&#xff0c;错误发现的越早越好而TS就解决了JS的这个问题 认识TypeScript TypeScript是拥有类型的JavaScript超级&#xff0c;它可以编译成普通、…...

C语言—指针

碎碎念:做指针题的时候我仿佛回到了原点&#xff0c;总觉得目的是为了把框架搭建起来&#xff0c;我胡说的哈31 1.利用指针变量将一个数组中的数据反向输出。 /*1.利用指针变量将一个数组中的数据反向输出。*/#include <stdio.h> #include <time.h> #include <…...

c++作业

Shell中的函数&#xff08;先调用后使用的原则&#xff09;&#xff08;没有申明&#xff09; &#xff08;Function&#xff09; 函数名&#xff08;有没有参数根据调用格式&#xff09;&#xff08;不能写任何内容&#xff09; { 函数体 Return 返回值 } 函数名 ----》…...

什么是tomcat?tomcat是干什么用的?

前言 Tomcat是一个开源的、轻量级的应用服务器&#xff0c;是Apache软件基金会的一个项目。它实现了Java Servlet、JavaServer Pages&#xff08;JSP&#xff09;和Java Expression Language&#xff08;EL&#xff09;等Java技术&#xff0c;用于支持在Java平台上运行的动态W…...

中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码...

本期文章复现一篇发表于2024年来自中科院一区TOP顶刊《Energy》的改进蜣螂算法。 论文引用如下&#xff1a; Li Y, Sun K, Yao Q, et al. A dual-optimization wind speed forecasting model based on deep learning and improved dung beetle optimization algorithm[J]. Ener…...

C# 如何实现一个事件总线

EventBus&#xff08;事件总线&#xff09;是一种用于在应用程序内部或跨应用程序组件之间进行事件通信的机制。 它允许不同的组件通过发布和订阅事件来进行解耦和通信。在给定的代码片段中&#xff0c;我们可以看到一个使用C#实现的Event Bus。它定义了一些接口和类来实现事件…...

Python学习路线图

防止忘记&#xff0c;温故知新 进阶路线...

作业2.14

chgrp: 只能修改文件的所属组 chgrp 新的组 文件名 要求&#xff1a;修改的目标组已经存在 chown: chown 新的用户名 文件名 sudo chown root &#xff1a;1 将文件1的所属组用户和所属组用户都改为root sudo chown root&#xff1a;ubuntu 1 将文件1的所属用户…...

基于python+django+mysql的小区物业管理系统

该系统是基于pythondjango开发的小区物业管理系统。适用场景&#xff1a;大学生、课程作业、毕业设计。学习过程中&#xff0c;如遇问题可以在github给作者留言。主要功能有&#xff1a;业主管理、报修管理、停车管理、资产管理、小区管理、用户管理、日志管理、系统信息。 演示…...

控制与状态机算法

控制与状态机算法是计算机科学、电子工程和自动化领域中常用的一种设计工具,它用来描述一个系统的行为,该系统在不同时间点可以处于不同的状态,并且其行为取决于当前状态以及输入的信号或事件。状态机算法的核心概念包括: 状态(State):系统的任何可能配置。每个状态代表…...

sql常用语句小结

创建表&#xff1a; create table 表名&#xff08; 字段1 字段类型 【约束】【comment 字段1注释】&#xff0c; //【】里面的东西可以不用加上去 字段2 字段类型 【约束】【comment 字段2注释】 &#xff09;【comment 表注释】 约束&#xff1a;作用于表中字段上的规则…...

云计算基础-虚拟机迁移原理

什么是虚拟机迁移 虚拟机迁移是指将正在运行的虚拟机实例从一个物理服务器&#xff08;或主机&#xff09;迁移到另一个物理服务器&#xff08;或主机&#xff09;的过程&#xff0c;而不会中断虚拟机的运行。 虚拟机拟机迁移分类虚 热迁移&#xff1a;开机状态下迁移 冷迁…...

云计算基础-云计算概念

云计算定义 云计算是一种基于互联网的计算方式&#xff0c;通过这种计算方式&#xff0c;共享的软硬件资源和信息可以按需提供给计算机和其他设备。云计算依赖资源共享以达成规模经济&#xff0c;类似基础设置(如电力网)。 云计算最基本的概念就是云加端&#xff0c;我们有一个…...

如何将阿里云服务器迁移

&#x1f4d1;前言 本文主要是如何将阿里云服务器迁移实现数据转移的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️** &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日…...

如何将本地的python项目部署到linux服务器中

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 。 前言 本地写好的python项目&#xff0c;如何部署在服务器上运行呢&#xff1f;今天&#xff0c;我们就来抽一点点时间来看看。&#xff08;网上找的资料&#xff0c;大部分都囫囵吞枣的…...

每日五道java面试题之java基础篇(五)

目录&#xff1a; 第一题. final、finally、finalize 的区别&#xff1f;第二题. 和 equals 的区别&#xff1f;第三题.hashCode 与 equals?第四题. Java 是值传递&#xff0c;还是引⽤传递&#xff1f;第五题 深拷贝和浅拷贝&#xff1f; 第一题. final、finally、finalize 的…...

HiveSQL——用户行为路径分析

注&#xff1a;参考文档&#xff1a; SQL之用户行为路径分析--HQL面试题46【拼多多面试题】_路径分析 sql-CSDN博客文章浏览阅读2k次&#xff0c;点赞6次&#xff0c;收藏19次。目录0 问题描述1 数据分析2 小结0 问题描述已知用户行为表 tracking_log&#xff0c; 大概字段有&…...

专利的申请

申请发明或者实用新型专利的&#xff0c;应当提交请求书、说明书及其摘要和权利要求书等文件。 请求书应当写明发明或者实用新型的名称&#xff0c;发明人或者设计人的姓名&#xff0c;申请人姓名或者名称、地址&#xff0c;以及其他事项。 说明书应当对发明或者实用新型作出清…...

嵌入式学习 C++ Day5、6

嵌入式学习 C Day5、6 一、思维导图 二、作业 1.以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴…...

阿里云香港服务器cn2速度测试和租用价格表

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…...

《学成在线》微服务实战项目实操笔记系列(P92~P120)【下】

史上最详细《学成在线》项目实操笔记系列【下】&#xff0c;跟视频的每一P对应&#xff0c;全系列18万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 四、课程发布模块 4.1 (课程发布)模块需求…...

php数据类型以及运算符、判断条件

php数据类型以及运算符 1. php数据类型2. 使用举例3. 运算符4. 判断条件if else elseif 1. php数据类型 包括 String(字符串)、Integer(整型)、Float(浮点型)、Boolean(布尔型)、Array(数组)、Object(对象)、NULL(空值) 2. 使用举例 1.字符串 2.整型 3.浮点型 4.布尔型 5.数组…...

大数据01-导论

零、文章目录 大数据01-导论 1、数据与数据分析 **数据&#xff1a;是事实或观察的结果&#xff0c;是对客观事物的逻辑归纳&#xff0c;是用于表示客观事物的未经加工的原始素材。**数据可以是连续的值&#xff0c;比如声音、图像&#xff0c;称为模拟数据&#xff1b;也可…...

智能网卡(SmartNIC):增强网络性能

在当今的数字时代&#xff0c;网络性能和数据安全是各行各业面临的关键挑战。智能网卡是一项颠覆性的技术创新&#xff0c;对增强网络性能和加强数据安全性具有关键推动作用。本文旨在探讨智能网卡的工作原理及其在不同应用场景中的重要作用。 什么是智能网卡&#xff1f; 智…...

算法刷题day14

目录 引言一、平均二、三国游戏三、松散子序列 引言 今天做了三道新题&#xff0c;类型是贪心、枚举、DP&#xff0c;不是特别难&#xff0c;但是努力一下刚好能够够得上&#xff0c;还是不错的&#xff0c;只要能够一直坚持下去&#xff0c;不断刷题不断总结&#xff0c;就是…...

个性签名大全

只许一生浮世清欢愿我以孤独作为铠甲&#xff0c;自此不再受伤愿我是阳光&#xff0c;明媚而不忧伤我不敢太勇敢太执着太骄傲&#xff0c;我怕失去开始你是我的天使&#xff0c;最后你是我的唯一姐的霸气&#xff0c;无人能比&#xff0c;哥的傲气&#xff0c;无人能朋唯有万事…...

前端常用代码整理(不断更新中)— js,jquery篇(2)

目录 1.随机生成字符串 2.删除数组中重复元素 3.RGB到十六进制转换机制 4.打乱一个数组&#xff0c;重新组合 5.获取两个日期的时间间隔 &#xff08;天数&#xff09; 6.获取当天属于今年的第几天 7.截取字符串长度,超过部分显示为 ... 8.判断数组是否为空 9.英文句子首…...

普中51单片机学习(六)

点亮第一个LED LED相关知识 LED,即发光二极管&#xff0c;是一种半导体固体发光器件。工作原理为&#xff1a;LED的工作是有方向性的&#xff0c;只有当正级接到LED阳极&#xff0c;负极接到LED的阴极的时候才能工作&#xff0c;如果反接LED是不能正常工作的。其原理图如下 …...

visual studio注册码

最近在研究c/c 安装visual studio 需要注册 技术博客http://idea.coderyj.com/ 注册码 Visual Studio 2022(VS2022)激活码&#xff1a; Pro&#xff08;专业版&#xff09;: TD244-P4NB7-YQ6XK-Y8MMM-YWV2J Enterprise&#xff08;企业版&#xff09;: VHF9H-NXBBB-638P6-6JHC…...

Studio One 6.5下载安装激活图文教程

Studio One 6.5是由PreSonus公司打造一款功能强大的数字音乐创作软件&#xff0c;不仅为用户们提供了制作、混合、掌握和执行所有操作&#xff0c;还提供了简洁直观的主界面&#xff0c;因此使用起来也是十分的简单&#xff0c;就算是初学者也可以快速的上手使用起来&#xff0…...