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]);

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

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

相关文章

洛谷P8627 饮料换购 题解

#题外话&#xff08;第27篇题解&#xff09;&#xff08;本题为普及-难度&#xff09; #先看题目 题目链接https://www.luogu.com.cn/problem/P8627 #思路&#xff08;用while循环&#xff0c;循环到山穷水尽为止&#xff0c;用一个计数的计量&#xff09; #代码 #include …

数据分析(一) 理解数据

1. 描述性统计&#xff08;summary&#xff09; 对于一个新数据集&#xff0c;首先通过观察来熟悉它&#xff0c;可以打印数据相关信息来大致观察数据的常规特点&#xff0c;比如数据规模&#xff08;行数列数&#xff09;、数据类型、类别数量&#xff08;变量数目、取值范围…

论文解读:Masked Generative Distillation

文章汇总 话题 知识蒸馏 创新点 带掩盖的生成式蒸馏 方法旨在通过学生的遮罩特征来生成老师的特征(通过遮盖学生部分的特征来生成老师的特征)&#xff0c;来帮助学生获得更好的表现 输入:老师:&#xff0c;学生:&#xff0c;输入:&#xff0c;标签:&#xff0c;超参数: 1:使…

Apache DolphinScheduler中ZooKeeperCDH不兼容问题的解决方案

背景 看到Apache DolphinScheduler社区群有很多用户反馈和讨论这块问题&#xff0c;针对不兼容的问题&#xff0c;不仅需要自己重新编译各一个新包&#xff0c;而且因为默认是使用zk-3.8的配置&#xff0c;所以会出现不兼容问题。使用zk-3.4配置即可适配3.4.x 解决办法&#…

Web 扫描神器:WhatWeb 保姆级教程(附链接)

一、介绍 WhatWeb 是一款用于识别网站技术栈和特征的开源Web扫描工具。它可以自动分析网站的响应并识别出使用的Web框架、CMS、服务器、JavaScript库等技术组件。WhatWeb的目标是通过分析网站的内容&#xff0c;提供有关目标的技术信息&#xff0c;这对于安全测试、漏洞评估和…

简析剩余电流动作继电器在油气田站场内监测路灯接地方式

安科瑞电气股份有限公司 上海嘉定 201801 【摘要】油气站站场内路灯接地方式多采用TT系统&#xff0c;部分采用TN-S系统&#xff0c;但无论TT系统还是TN-S系统均存在相应问题&#xff0c;为解决相应问题&#xff0c;本文建议油气田站场内路灯接地方式采用TN-S系统局部TT系统。…

数组转二叉树的一种方法-java(很特殊)

上代码 Node节点的代码 public class ThreadNode {private int data;private ThreadNode left;private boolean leftTag; // 左子节点是否为线索private ThreadNode right;private boolean rightTag; // 右子节点是否为线索// ... 省略get和set方法// ... 省略构造方法// ... …

《隐私计算简易速速上手小册》第2章:关键技术介绍(2024 最新版)

文章目录 2.1 同态加密2.1.1 基础知识2.1.2 主要案例&#xff1a;云计算数据分析2.1.3 拓展案例 1&#xff1a;医疗数据分析2.1.4 拓展案例 2&#xff1a;金融风险评估 2.2 安全多方计算&#xff08;SMC&#xff09;2.2.1 基础知识2.2.2 主要案例&#xff1a;跨机构金融数据共享…

不要被带偏了,只靠运动减肥的效果极其有限;数据告诉你,不同减肥方式的真正效果

很多朋友问只靠运动是否能够达到减肥目标。 我们先看Chat GPT4的回答&#xff1a; 仅靠运动来成功减肥是可能的&#xff0c;但通常效果有限&#xff0c;而且比较困难。 减肥的基本原理是消耗的热量必须超过摄入的热量&#xff0c;从而产生能量赤字&#xff0c;使身体开始消耗…

已创建IAM子用户,添加云监控权限不生效

云上已创建IAM子用户&#xff0c;添加云监控权限不生效&#xff0c;如何解决。 此问题与权限配置有关&#xff0c;一般为IAM子帐号权限不足&#xff0c;需检查IAM配置的权限。 管理员使用主账户登录管理控制台。在统一身份认证服务&#xff0c;左侧导航窗格中&#xff0c;单击…

[VulnHub靶机渗透] Fowsniff

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

Java 学习和实践笔记(11)

三大神器&#xff1a; 官方网址: http://www.jetbrains.com/idea/ 官方网址: https://code.visualstudio.com/ 官方网址: http://www.eclipse.org 装好了idea社区版&#xff0c;并试运行以下代码&#xff0c;OK&#xff01; //TIP To <b>Run</b> code, press &l…