TS基础语法

前言:

因为在写前端的时候,发现很多UI组件的语法都已经开始使用TS语法,不学习TS根本看不到懂,所以简单的学一下TS语法。为了看UI组件的简单代码,不至于一脸懵。

一、安装node

对于windows来讲,node版本高点还好,对于linux(centos7)来讲,尽量使用node16或者node18版本,太高linux的动态库不支持,需要升级动态库

E:\vuecode\练习>node -v
v18.12.1 

二、安装typescript

E:\vuecode\练习>npm -g install typescript
added 1 package in 672ms#查看版本
E:\vuecode\练习>tsc -v
Version 5.3.3

三、基本语法

1.数据类型

1.1 声明变量

ts最大的特点就是声明了数据类型。样例代码如下:
声明数字类型和字符串类型

let n1: number
n1 = 10let s1: string
s1 = "hello world"console.log(n1,s1)

将ts文件编译成js文件,并运行js文件

E:\vuecode\练习>tsc test1.ts  
E:\vuecode\练习>node test1.js
10 hello world

1.2 自动识别类型

这里没有声明变量的类型,在将字符串赋值给n1的时候,ts的编译器检测出了语法问题

let n1 = 10
console.log(n1)n1 = "hello world"
console.log(n1)
E:\vuecode\练习>tsc test1.ts  
test1.ts:4:1 - error TS2322: Type 'string' is not assignable to type 'number'.4 n1 = "hello world"~~

2.特殊数据类型

2.1 any 任意类型

let a: any = 1
console.log(a)a = "hello world"
console.log(a)a = true
console.log(a)a = [1,2,3,4]
console.log(a)执行结果如下
E:\vuecode\练习>node test1.js
1
hello world   
true
[ 1, 2, 3, 4 ]

开发中不建议使用any类型

2.2 联合类型

限定了a的取值范围

let a: 1 | 2
a = 1
console.log(a)a = 2 
console.log(a)#这里会报错,不能将3赋值给a
let a: 1 | 2
不能将类型“3”分配给类型“1 | 2”。ts(2322)
a = 3 
console.log(a)

限定a的赋值类型范围

let a: number | string
a = 1
a = "hello"#这样超出了a的取值类型范围
a = true

2.3 unknown

let a: unknown
a = "hello"
console.log(a)a = 1
console.log(a)a = true
console.log(a)

unknow的二次赋值

let a: unknown
a = "hello"此时将unknown类型的a 赋值给b就不可以了。因为类型不匹配
let b: string
b = a解决办法有两种
1.类型断言
b = a as string2.声明变量的类型
b = <string>a

2.4 void

void表示空,一般用于函数没有返回值

function test(): void {console.log(111)
}

2.5 never

什么值都没有,空也不会返回

3.对应js的类型的ts类型

3.1 object

object表示js中的对象,在开发中object使用的比较少。因为限制变量是不是对象的情况比较少,主要是限制对象中的属性的类型以及属性的数量。

3.1.1 基本定义:

不限制对象中属性的数量以及属性值的类型
写法1:

let o1: {} #或者 let o1: object
o1 = {name: "zhangsan",age: 20}
console.log(o1)

写法2:
表示对象中可以有任意string类型的key,值的类型为任意

let b: {[anyname: string]: any}
b = {name: "zhangsan",age: 20, gender:"男"}
console.log(b)
3.1.2 限定对象的属性数量

正确赋值

let a: {name: string}
a = {name: "zhangsan"}
console.log(a)

错误赋值,因为对象限制了属性只有name

let a: {name: string}
a = {name: "zhangsan",age: 20}
3.1.3 设定可选属性

有这种场景,设定了对象中有多个属性,一个必须的,其他的可以不传递。也可以传递。
其中属性名后边的 “?” 就是设定属性为可选属性

let o1: {name: string,age?:number,gender?:string}
o1 = {name: "zhangsan"}
console.log(o1)o1 = {name: "lisi",age: 20}
console.log(o1)o1 = {name: "wangwu",gender:"boy"}
console.log(o1)o1 = {name:"张无忌",age: 100, gender:"boy"}
console.log(o1)执行结果如下:
E:\vuecode\练习>tsc test1.ts  
E:\vuecode\练习>node test1.js
{ name: 'zhangsan' }
{ name: 'lisi', age: 20 }
{ name: 'wangwu', gender: 'boy' }
{ name: '张无忌', age: 100, gender: 'boy' }
3.1.4 设定固定属性,其余属性不定长
let o1: {name: string,[anyname: string]: any}
o1 = {name: "zhangsan",age: 20 ,gender: "girl",class: 3}
console.log(o1)E:\vuecode\练习>tsc test1.ts  E:\vuecode\练习>node test1.js
{ name: 'zhangsan', age: 20, gender: 'girl', class: 3 

3.2 数组

定义方式一:

let a1: number[]
a1 = [1,2,3,4,5]
console.log(a1)

定义方式二

let a2: Array<number>
a2 = [1,2,3,4,5]
console.log(a2)

3.2 元组

元组和数组的区别是元组的的长度是固定的

let t1: [string,number]
t1 = ["zhangsan",10]

4.type关键字

type的作用主要是给数据类型起一个别名

例如:

type num = number
let n1: num = 10console.log(n1)

5.反引号

反引号是ES6中的 模板字符串。
这是比较常用的一种,在字符串中插入变量

let name1 = "zhangsan"
let age  = 20console.log(`我的名字叫${name1},我${age}岁了`)

四、泛型

1.定义使用泛型

在定义函数或者是类时,对于类型不明确的时候就就可以使用泛型。例如:

function test<T>(content: T): T{return content
}

解释:
定义函数test的时候,不能确定content参数的类型是什么类型,这时候使用泛型
第一个T 是定义了一个泛型T
第二个T 是定义content参数是一个泛型类型的参数
第三个T 是定义 返回值的类型是T类型

2.使用

2.1 方式1:

利用ts的对数据类型的自动推断功能,进行传值,将鼠标分别放在r1,r2,r3,r4的上边,可以看到它们的类型。也就说你传递的什么类型的值,就返回什么类型的值

function test<T>(content: T): T{return content
}let r1 = test(10)
let r2 = test("hello")
let r3 = test([1,2,3,"hello"])
let r4 = test({name:"zhangsan"})
2.2 方式2:

当有时候,当给函数传递的类型比较复杂时候,TS无法自动推断出类型时,需要手动声明传递的参数的类型,代码如下

function test<T>(content: T): T{return content
}向test函数声明传递的参数为string
let r1 = test<string>("hello")向test函数声明传递的参数为一个内容包含数字和字符串的数组
let r2 = test<(number|string)[]>([1,2,3,"hello"])向test函数声明传递的参数为一个只有name和age的对象
let r3 = test<{name:string,age:number}>({name: "zhangsan",age: 20})

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

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

相关文章

电脑出现这些现象,说明你的固态硬盘要坏了

与传统机械硬盘&#xff08;HDD&#xff09;相比&#xff0c;固态硬盘&#xff08;SSD&#xff09;速度更快、更稳定、功耗更低。但固态硬盘并不是完美无瑕的&#xff0c;由于颗粒写入机制&#xff0c;可能会在七到十年的预期寿命之前出现故障。所以用户最好为最终故障做好准备…

网页设计中增强现实的兴起

目录 了解增强现实 增强现实的历史背景 AR 和网页设计的交叉点 AR 在网页设计中的优势 增强参与度和互动性 个性化的用户体验 竞争优势和品牌差异化 AR 在网页设计中的用例 结论 近年来&#xff0c;增强现实已成为一股变革力量&#xff0c;重塑了我们与数字领域互动的方式。它被…

【FMCW毫米波雷达设计 】 — FMCW波形

原书&#xff1a;FMCW Radar Design 1 引言 本章研究驱动FMCW雷达的主要波形:线性调频(LFM)波形。我们研究信号的行为及其性质。随后&#xff0c;本章讨论了匹配滤波理论&#xff0c;并研究了压缩这种波形的技术&#xff0c;特别是所谓的拉伸处理&#xff0c;它赋予FMCW雷达极…

DOS 批处理 (二)

DOS 批处理 1. 基础 DOS 命令1.1 基础命令1.2 文件系统操作1.3 文件夹管理1.4 文件管理1.5 网络相关1.6 系统管理1.7 IF、FOR和NETIFFORNET 1. 基础 DOS 命令 command /? 查找帮助DOS命令不区分命令字母的大小写 C:\Users\Administrator>echo 1 1 C:\Users\Administrator…

基于SSM框架的仓库管理系统

基于SSM框架的仓库管理系统 文章目录 基于SSM框架的仓库管理系统 一.引言二.系统设计三.技术架构四.功能实现五.界面展示六.源码获取 一.引言 现代商业环境中&#xff0c;仓库管理对于企业的运营效率和客户满意度至关重要。传统的手工管理方式已经无法满足日益复杂的仓储需求。…

【Spring】SpringBoot日志

SpringBoot日志 日志概述日志使用打印日志获取日志对象使用日志对象打印日志日志框架介绍门面模式SLF4J框架介绍(simple logging facade for java) 日志格式说明日志级别日志级别的分类日志级别的使用 日志配置配置日志级别日志持久化配置日志文件的路径和文件名配置日志文件的…

【刷题篇】动态规划(六)

文章目录 1、最大子数组和2、环形子数组的最大和3、乘积最大子数组4、乘积为正数的最长子数组长度5、 等差数列划分6、最长湍流子数组 1、最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&…

【Unity动画】Avatar Mask

创建 Avatar Mask可以设置那一部分骨骼运动和不运动 然后放在状态机里面的层中来混合 【后续完善】

深入探索 Rust 宏编程

Rust 宏提供了一种强大的方法来编写抽象和重用代码,它们在 Rust 编程中扮演着重要的角色。本文将深入探索 Rust 宏的概念、类型、使用方法以及如何实现自定义宏,以提供一个全面的 Rust 宏编程指南。 Rust 宏简介 宏是 Rust 中的一种元编程工具,它们在编译时运行,用于生成…

linux安装node

文章目录 安装node 安装node 一次手操记录 - 首先安装wget yum install -y wget - 下载nodejs最新的tar包 wget https://cdn.npm.taobao.org/dist/node/v12.12.0/node-v12.12.0-linux-x64.tar.xz - 解压包 tar -xvf node-v12.12.0-linux-x64.tar.xz - 部署bin文件 先确认你no…

30 张图解 HTTP 常见的面试题

前言 在面试过程中&#xff0c;HTTP 被提问的概率还是比较高的 我搜集了 5 大类 HTTP 面试常问的题目&#xff0c;同时这 5 大类题跟 HTTP 的发展和演变关联性是比较大的&#xff0c;通过问答 图解的形式由浅入深的方式帮助大家进一步的学习和理解 HTTP 协议。 HTTP 基本概…

第四节JavaScript 条件语句、循环语句、break与continue语句

一、JavaScript条件语句 在通常的代码中&#xff0c;我们有一些需要决定执行不同动作&#xff0c;这就可以在代码中使用条件语句来完成。 下面是我们常使用的条件语句&#xff1a; if语句&#xff1a;只有当指定条件是true时&#xff0c;执行条件内代码。if…else语句&#…

JavaScript数组的长度

JavaScript数组的长度可以通过数组对象的length属性来获取&#xff0c;长度表示数组中元素的数量。 代码示例&#xff1a; let arr []; // 定义一个空数组 console.log(arr.length); // 输出 0arr.push(1); // 给数组添加元素 arr.push(2); arr.push(3); console.log(arr.le…

项目二 创建与操作学生管理数据库

项目二 创建与操作学生管理数据库 #目标 创建库&#xff1b;查看库&#xff1b;操作库&#xff1b;图形工具操作库1&#xff0c;创建学生管理数据库 #创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collat…

44.0/认识前端

44.1 目录 44.1.1 网页 44.1.1.1 网页的组成 44.1.1.2 网页的分类 44.1.2 网站 44.1.2.1 网站的分类 44.1.3 主页 44.2. Internet、IP 地址和域名 44.2.1 Internet 44.2.2 IP 44.2.3 域名 44.3. Web 前端技术概述 44.3.1 html5 44.3.2 CSS3 44.3.3 Javascript …

hbuiler中使用npm安装datav

注&#xff1a;datav边框样式目前使用时&#xff1a;适用于网页&#xff0c;不适用于app 1、先安装node 安装、配置Node路径 2、为Node配置环境变量 3、在hbuilder的设置中填写node的路径 配置 4、打开cmd输入npm install jiaminghi/data-view 安装dataV&#xff0c;&…

当初为什么选择计算机-希望一直干下去

还记得当初自己为什么选择计算机&#xff1f; 当初你问我为什么选择计算机&#xff0c;我笑着回答&#xff1a;“因为我梦想成为神奇的码农&#xff01;我想像编织魔法一样编写程序&#xff0c;创造出炫酷的虚拟世界&#xff01;”谁知道&#xff0c;我刚入门的那天&#xff0…

.360勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

尊敬的读者&#xff1a; 在数字时代&#xff0c;.360勒索病毒如同数字的幽灵&#xff0c;悄无声息地侵入用户的数字领域&#xff0c;将珍贵的数据文件变为数字的囚牢。本文将介绍.360勒索病毒的特征&#xff0c;提供解密和数据恢复的方法&#xff0c;并分享有效的预防措施&…

【PID学习笔记 9 】控制系统的分析方法之二

写在前面 前文重点介绍时域分析法、本文将继续学习控制系统的另外几种分析方法&#xff0c;包括根轨迹法、频率分析法、状态空间分析法。再次强调&#xff0c;在这里只是做了一个系统化的概述&#xff0c;目的是让学习PID&#xff0c;特别是用PID的工程人员有一个对基础知识的…

【开源】基于JAVA语言的数字化社区网格管理系统

项目编号&#xff1a; S 042 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S042&#xff0c;文末获取源码。} 项目编号&#xff1a;S042&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5…