【TypeScript】初识TypeScript和变量类型介绍

TypeScript

      • 1,TypeScript是什么?
      • 2,类型的缺失带来的影响
      • 3,Ts搭建环境-本博主有专门的文章专说明这个
      • 4,使用tsc对ts文件进行编译
      • 5,TS运行初体验
        • 简化Ts运行步骤
          • 解决方案1
          • 解决方案2(常见)
      • 开始学习
        • 1,变量的声明
          • 变量的声明关键字
          • 变量的类型推导(推断)
        • 2,变量的类型
        • 3,函数的类型 - 参数
        • 4,函数的类型 - 返回值
        • 5,匿名函数的参数
        • 6,对象类型的使用
        • 6,any类型
        • 7,unKnown类型
        • 7,void类型
        • 8,never类型
        • 9,tuple类型(元组类型)

1,TypeScript是什么?

  • 主要为解决js的类型缺失
  • 可以在开发阶段进行校验,给予报错提示

特点:

  • 以js为基础构建的语言
  • 一个js的超集
  • Ts扩展了js并添加了类型
  • Ts可以在任何支持js的平台中执行
  • Ts不能被js解析器直接执行,得通过编译,一般通过Babel/TSC编译成js
  • 也支持es的新特性
    在这里插入图片描述

2,类型的缺失带来的影响

  • 当开发大型项目的时候,项目的庞大,没有类型约束,会带来安全隐患
  • 多人开发的时候,没有类型约束,就需要对别人传入的参数进行各种验证

3,Ts搭建环境-本博主有专门的文章专说明这个

  • npm i -v typescript -g
  • tsc

4,使用tsc对ts文件进行编译

  • 进入命令行
  • 进入ts文件所在目录
  • 执行命令 tsc xxx.ts
    在这里插入图片描述

5,TS运行初体验

//string,TypeScript给我们定义的标识符,提供的字符串类型
//String,JavaScript中的字符串的包装类
let myname: string="乞力马扎罗"
// myname=112,这样就不可以,因为上面已经明确告诉你指定类型了
console.log(myname)
  • 每次想要运行上面ts文件,都通过两个步骤
  • 第一步:通过tsc编译到TypeScript代码
  • 第二步:在游览器或者Node环境下运行JavaScript代码
  • 有点繁琐~

简化Ts运行步骤

解决方案1
  • 通过webpack配置本地的TypeScript编译环境和开启一个本地服务,可以直接运行在游览器上
  • 通过webpack的loader将vue的各种编译转化成js,css
    在这里插入图片描述
解决方案2(常见)
  • 通过ts-node库,为TypeScriot的运行提供执行环境
  • 安装ts-node
npm install ts-node -g
  • 需要依赖两个包tslib和 @types/node
 npm install tslib @types/node -g
  • 使用ts-node ts文件名,运行ts文件即可

开始学习

1,变量的声明

  • 下面的数据类型也叫类型注解,可省略
    在这里插入图片描述
  • 类似这个
let myname: string="乞力马扎罗"
// myname=112,这样就不可以,因为上面已经明确告诉你指定类型了
console.log(myname)
变量的声明关键字
  • 不建议使用var,因为没有块级作用域,会引起问题
变量的类型推导(推断)
  • 在实际项目中,不会给每个变量进行类型注解,我们更希望通过ts本身的特性帮助我们推导出对应的变量类型
  • ts在声明标识符的时候,如果直接进行赋值,会根据赋值的类型推导出标识符的类型注解
  • let进行类型推导出来的是通用类型
  • const进行类型推导出来的是字面量类型
let myname1 ="乞力马扎罗"
//myname1=112//,这样也不可以,因为上面已经推导出string类型了
console.log(myname)

2,变量的类型

  • 字面量类型
    在这里插入图片描述

  • number类型

  • Ts和Js一样,不区分整数类型(int)和浮点型(double),统一为number类型
  • boolean类型
  • boolean类型只有两个取值,true和false
  • 字符串类型
  • sting类型,单引号和双引号都支持,模板字符串也支持
  • 数组类型
// 注意,在开发中,数组中存放的都是相同的类型
// 1,sting[],数组类型,并且数组中存放的字符串类型,常用写法
// 2,Array<number>,数组类型,这种的只能存放数值,这种的其实是泛型的写法
let num = ['1', '2', '3']
let num1: string[] = ['1', '2', '3']
let num2: Array<number> = []
let num3: Array<string> = []
  • Object类型
// 写法一,类型推导写法
let obj = {name: "乞力马扎罗",age: 18
}
// 写法2
type objtype = {name: stringage: number
}
let obj1: objtype = {name: "乞力马扎罗",age: 18
}
// 写法3
let obj3: {name: stringage: number
} = {name: "乞力马扎罗",age: 18
}
console.log(obj3.age)
// 写法4,不建议,它是空对象,不能调用obg2.name等
// object对象类型可以用于描述一个对象,不能获取和设置数据
let obj4: object = {name: "乞力马扎罗",age: 18
}
// console.log(obj4.age)//报错
  • 在对象中,不可以添加相同的属性名称,类似这个
// 写法一
let obj = {name: "乞力马扎罗",name:"嘿嘿",age: 18
}
//通过采取symbol定义相同的名称,因为Symbol函数返回不同的值
const s1: symbol = Symbol("title")
const s2: symbol = Symbol("title")
let obj3 = {s1: Symbol("乞力马扎罗"),s2: Symbol("乞力马扎罗"),age: 18
}
  • null类型和undefined类型
let n: null = null
let u: undefined = undefined

3,函数的类型 - 参数

  • 当函数的参数没有给明确的类型的时候,默认any类型
  • 在定义一个TypeScript中的函数的的时候,都要明确指定参数的类型在这里插入图片描述
function sum(num1:number, num2:number) {return num1 + num2
}
sum(1,2)

4,函数的类型 - 返回值

  • 函数的返回值可以自己根据返回的内容进行推导
  • 也可以指定返回值类型
//方式1
function sum(num1: number, num2: number) {return num1 + num2
}
let sum2: string = sum(1, 2)//报错
console.log(sum2)
//方式2
function sum(num1: number, num2: number):number {return num1 + num2
}
let sum2 = sum(1, 2)
console.log(sum2)
  • 返回的类型不对,提示报错

在这里插入图片描述

5,匿名函数的参数

const arrs =['1','2','3']
//匿名函数,作为参数传递给另一个函数,是否要类型注解?最好不要加!
//forEach接收的是函数,里面的值已经有明确的类型,它是根据上下文推导出来的
//类似此时,item并没有指定类型,但是item是string类型
//这个根据上下文进行推导参数何返回值的类型的过程叫做上下文类型
arrs.forEach(function(item,index,arr){console.log(item,index,arr)
})

6,对象类型的使用

  • 对象类型和函数类型的结合使用
  • 在对象我们可以添加属性,并且告知ts该属性需要什么类型
  • 属性之间可以使用,或者;来分割,最后一个分隔符是可选的
  • 每个属性的类型部分,也是可选的,如果不指定,那么就是any类型
type Pointtype={x:numbery:number//如果不指定,下面就是any类型z?:number//可选,下面不传也不会报错
}
function handler(point:Pointtype){console.log(point.x)
}
handler({x:1,y:2})

6,any类型

  • 给一个any类型的变量赋值任何的值,比如数字,字符串的值
  • 一般对于拿到的数据过于繁琐的时候,采用这个any
let id = "1"
id = "2"
// id = 2//报错
// 故:
// any类型就表示不同标识符的任意类型,并且可以在该标识符上面进行人员的操作
let id1: any = "1"
id1 = "2"
id1 = 2//不报错
  • 定义any类型的数组
let idarrs: any[] = ['1',1,[2]]

7,unKnown类型

  • 比较特殊的一种类型,用于描述不确定的变量
  • 和any差不多,但unKnown类型的值上做任何事情都是不合法的
  • 想要不报错,必须先进行类型缩小
let idarrs: unknown="999"
idarrs=2
// console.log(idarrs.length)//报错
// 解决报错,必须先校验,也叫类型缩小
if(typeof idarrs=='string'){console.log(idarrs.length)//不报错
}

7,void类型

  • void通常指定一个函数是没有返回值的,那么他的返回值就是void类型
  • 定义了void后,不强制不可以有返回值return
  • 当基于上下文推导出来的类型为void的时候,并不会强制函数一定不能返回函数
  • 也可以将undefined赋值给void类型函数也可以返回undefined
    在这里插入图片描述
//方式1
type Pointtype = {x: numbery: number
}
function handler(point: Pointtype): void {console.log(point.x)
}
handler({ x: 1, y: 2 })
//方式2,自己推导写法
const foo = () => { }
//方式2,用来指定函数的类型
const foo1: () => void = () => { }
//方式3,清晰写法
type footype = () => void
const foo2: footype= () => { }
//方式4,函数调用,指定函数的类型为void,传的时候必传函数
function funs(fn:()=>void){setTimeout(()=>{handler({ x: 1, y: 2 })},100)
}
// funs(123)//不可以传,会报错,因为人家接收函数类型,你传数值
funs(()=>{})//不可以传,会报错,因为人家接收函数类型,你传数值

8,never类型

  • 开发中很少实际去定义never类型
  • 某些情况自己出进行推导
  • 开发框架中或者封装一些类型工具的时候使用
  • 函数中抛出异常或者死循环会抛出异常

9,tuple类型(元组类型)

  • 数组中通常建议存放相同类型的元素,不同类型的元素不推荐放数组中,此时就可以放在对象或者元组中
  • 其次,元组中每个元素都有自己的特性的类型,可以根据索引值获取到的值可以确定对应的类型
// 存放多种类型值的方法
// 1,any类型
// 2,使用对象
const info2 = {name: "1",age: 2,height: 19.8
}
//使用元组类型
const info: [string, number, number] = ['1', 2, 2.88]

在这里插入图片描述

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

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

相关文章

Apache Paimon 学习笔记

本博客对应于 B 站尚硅谷教学视频 尚硅谷大数据Apache Paimon教程&#xff08;流式数据湖平台&#xff09;&#xff0c;为视频对应笔记的相关整理。 1 概述 1.1 简介 Flink 社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合&#xff0c;推…

Centos更换网卡名称为eth0

Centos更换网卡名称为eth0 已安装好系统后需要修改网卡名称为eth0 编辑配置文件将ens33信息替换为eth0,可在vim命令模式输入%s/ens33/eth0/g替换相关内容 修改内核文件,添加内容:net.ifnames=0 biosdevname=0 [root@nova3 ~]# vim /etc/default/grub 使用命令重新生成g…

【JAVA】有关时间的操作在编程中如何实现?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言Date 类Date 类方法Data的缺陷实例获取当前日期时间日期比较java中设置date数据的显示格式 前言 在许多应用程序中&#xff0c;日期和时间的处理是必不可少的。Java提供了一…

用Shap-E生成3D模型

Shap-E 是 OpenAI 开发的突破性模型&#xff0c;它使用文本或图像作为输入生成一系列 3D 对象&#xff0c;以其创新方法改变了 3D 应用领域。 这项非凡的技术可以在 GitHub 上免费获取&#xff0c;允许用户在计算机上无缝运行它&#xff0c;而无需 OpenAI API 密钥或互联网连接…

2023华数杯数学建模C题思路分析 - 母亲身心健康对婴儿成长的影响

# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一&#xff0c;她不仅为婴儿提供营养物质和身体保护&#xff0c; 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况&#xff0c;如抑郁、焦虑、 压力等&#xff0c;可能会对婴儿的认知、情…

桌面端UI自动化测试如何让SplitButtonControl展开

原始SplitButtonControl图 从图中鼠标所指的控件属性为&#xff1a; ControlType&#xff08;控件类型&#xff09;: SplitButtonControl ClassName&#xff08;类名&#xff09;: SplitButton AutomationId&#xff08;自动化ID&#xff09;: esri_geoprocessing_Pyt…

【Go】Go数据操作 - 处理JSON文件

目录 何为JSON 编码JSON 实践时刻 解码JSON 实践时刻 延伸拓展 何为JSON JSON (JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。JSON最初是 JavaScript的一部分&#xff0c;后由于便于快速编写的特性&#xff0c;被开发者独立出来。基本上所有的…

灵活利用ChatAI,减轻工作任务—语言/翻译篇

前言 ChatAI在语言和翻译方面具有重要作用。它能够帮助用户进行多语言交流、纠正错误、学习新语言、了解不同文化背景&#xff0c;并提供文本翻译与校对等功能。通过与ChatAI互动&#xff0c;我们能够更好地利用技术来拓展自己在语言领域的能力和知识&#xff0c;实现更加无障…

React Dva 操作models中的subscriptions讲述监听

接下来 我们来看一个models的属性 之前没有讲到的subscriptions 我们可以在自己有引入的任意一个models文件中这样写 subscriptions: {setup({ dispatch, history }) {console.log(dispatch);}, },这样 一进来 这个位置就会触发 这里 我们可以写多个 subscriptions: {setup…

编写简单的.gitlab-ci.yml打包部署项目

服务器说明&#xff1a; 192.168.192.120&#xff1a;项目服务器 192.168.192.121&#xff1a;GitLab 为了可以使用gitlab的cicd功能&#xff0c;我们需要先安装GitLab Runner 安装GitLab Runner参考&#xff1a; GitLab实现CICD自动化部署_gitlab cidi_程序员xiaoQ的博客-CS…

【资料分享】全志科技T507-H开发板规格书

1 评估板简介 创龙科技TLT507-EVM是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53国产工业评估板,主频高达1.416GHz,由核心板和评估底板组成。核心板CPU、ROM、RAM、电源、晶振等所有器件均采用国产工业级方案,国产化率100%。同时,评估底板大部分元器件亦采用国产…

数据库SQL优化技巧

作为程序员&#xff0c;主要的工作任务就是curd&#xff0c;和数据库打交道是无可避免的。掌握一些数据库的优化技巧是非常有必要的 一、减少数据访问 1、使用索引   索引的原理是利用额外的空间建立了一个平衡的搜索树&#xff0c;大大缩短了查询的时间&#xff0c;使得查…

STM32单片机蓝牙APP宠物自动喂食器定时语音提醒喂食系统设计

实践制作DIY- GC00162---蓝牙APP宠物自动喂食器 一、功能说明&#xff1a; 基于STM32单片机设计---蓝牙APP宠物自动喂食器 二、功能说明&#xff1a; STM32F103C系列最小系统板LCD1602显示器DS1302时钟模块5个按键语音播报模块ULN2003步进电机模块LED灯板HC-05蓝牙模块&#x…

企升编辑器word编写插件

面向用户群体招投标人员&#xff0c;用统一的模板来编写标书&#xff0c;并最终合并标书。项目经理&#xff0c;编写项目开发计划书&#xff0c;项目验收文档等。开发人员&#xff0c;编写项目需求规格说明书、设计说明书、技术总结等文档。其他文档编写工作量较多的岗位人员。…

用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能

一、实践发现了bug和不足 今天用了公文一键排版系统对几个PDF文件格式的材料进行文字识别后再重新排版&#xff0c;处理效果还是相当不错的&#xff0c;节约了不少的时间。 但是也发现了三个需要改进的地方&#xff1a; &#xff08;一&#xff09;发现了两个bug&#xff1a;…

智能优化算法——灰狼优化算法(PythonMatlab实现)

目录 1 灰狼优化算法基本思想 2 灰狼捕食猎物过程 2.1 社会等级分层 2.2 包围猎物 2.3 狩猎 2.4 攻击猎物 2.5 寻找猎物 3 实现步骤及程序框图 3.1 步骤 3.2 程序框图 4 Python代码实现 ​ 5 Matlab实现 1 灰狼优化算法基本思想 灰狼优化算法是一种群智能优化算法&a…

Flutter(八)事件处理与通知

1.原始指针事件处理 一次完整的事件分为三个阶段&#xff1a;手指按下、手指移动、和手指抬起&#xff0c;而更高级别的手势&#xff08;如点击、双击、拖动等&#xff09;都是基于这些原始事件的。 Listener 组件 Flutter中可以使用Listener来监听原始触摸事件 Listener({…

本地化部署自建类ChatGPT服务远程访问

本地化部署自建类ChatGPT服务远程访问 文章目录 本地化部署自建类ChatGPT服务远程访问前言系统环境1. 安装Text generation web UI2.安装依赖3. 安装语言模型4. 启动5. 安装cpolar 内网穿透6. 创建公网地址7. 公网访问8. 固定公网地址 &#x1f340;小结&#x1f340; 前言 Te…

基于gpt4all的企业内部知识问答服务应用搭建

文章目录 痛点项目缘起技术选型fine-tuningfew shot prompt engineering选定方案的特征描述 模型赛马gpt4all调优部署时踩坑python3.9 header缺失 -- 安装下缺失的就行运行时参数调优 代码分析项目代码库代码 效果展示例子1例子2 附录&#xff1a;所用的公司内部API文档例子&am…

c#设计模式-行为型模式 之 观察者模式

定义&#xff1a; 又被称为发布-订阅&#xff08;Publish/Subscribe&#xff09;模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者 对象同时监听某一个主题对象。这个主题对象在状态变化时&#xff0c;会通知所有的观察者对象&#xff0c;使他们能够自 …