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

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})

相关文章:

TS基础语法

前言&#xff1a; 因为在写前端的时候&#xff0c;发现很多UI组件的语法都已经开始使用TS语法&#xff0c;不学习TS根本看不到懂&#xff0c;所以简单的学一下TS语法。为了看UI组件的简单代码&#xff0c;不至于一脸懵。 一、安装node 对于windows来讲&#xff0c;node版本高…...

【基于NLP的微博情感分析:从数据爬取到情感洞察】

基于NLP的微博情感分析&#xff1a;从数据爬取到情感洞察 背景数据集技术选型功能实现创新点 今天我将分享一个基于NLP的微博情感分析项目&#xff0c;通过Python技术、NLP模型和Flask框架&#xff0c;对微博数据进行清洗、分词、可视化&#xff0c;并利用NLP和贝叶斯进行情感分…...

Ubuntu 18.04使用Qemu和GDB搭建运行内核的环境

安装busybox 参考博客&#xff1a; 使用GDBQEMU调试Linux内核环境搭建 一文教你如何使用GDBQemu调试Linux内核 ubuntu22.04搭建qemu环境测试内核 交叉编译busybox 编译busybox出现Library m is needed, can’t exclude it (yet)的解释 S3C2440 制作最新busybox文件系统 https:…...

GEE——利用Landsat系列数据集进行1984-2023EVI指数趋势分析

简介: 利用Landsat系列数据集进行1984-2023EVI指数趋势分析其主要目的是进行长时序的分析,这里我们选用EVI指数,然后进行了4个月的分析,查看其最后的线性趋势以及分布状况。 EVI指数: EVI指数(Enhanced Vegetation Index,增强型植被指数)是一种反映植被生长状态的遥…...

JAVA安全之Spring参数绑定漏洞CVE-2022-22965

前言 在介绍这个漏洞前&#xff0c;介绍下在spring下的参数绑定 在Spring框架中&#xff0c;参数绑定是一种常见的操作&#xff0c;用于将HTTP请求的参数值绑定到Controller方法的参数上。下面是一些示例&#xff0c;展示了如何在Spring中进行参数绑定&#xff1a; 示例1&am…...

辨析旅行商问题(TSP)与车辆路径问题(VRP)

目录 前言旅行商问题 (TSP)问题介绍数学模型符号定义问题输入约束条件目标函数问题输出 解的空间解空间大小计算解释 车辆路径问题 (VRP)问题介绍TSP到VRP的过渡数学模型符号定义问题输入约束条件优化目标问题输出 解空间特殊情况一般情况 TSP 与 VRP 对比 前言 计划是通过本文…...

2024年JAVA招聘行情如何?

大家都在说Java求职不好找&#xff0c;是真的吗&#xff1f;我们来看看数据。 数据支持&#xff1a;根据TIOBE 5月份的编程语言排行榜&#xff0c;Java仍然是前三名之一。这意味着&#xff0c;Java在开发领域仍然占据重要地位。 而在中国的IT市场中&#xff0c;Java仍然是主要…...

【合集】SpringBoot——Spring,SpringBoot,SpringCloud相关的博客文章合集

前言 本篇博客是spring相关的博客文章合集&#xff0c;内容涵盖Spring&#xff0c;SpringBoot&#xff0c;SpringCloud相关的知识&#xff0c;包括了基础的内容&#xff0c;比如核心容器&#xff0c;springMVC&#xff0c;Data Access&#xff1b;也包括Spring进阶的相关知识&…...

yolov5 获取漏检图片脚本

yolov5 获取漏检图片脚本 获取样本分数在0.05到0.38直接的样本。 # YOLOv5 by Ultralytics, GPL-3.0 licenseimport argparse import json import os import sys import time from pathlib import Pathimport cv2 import numpy as np import torch import torch.backends.cud…...

Unity之OpenXR+XR Interaction Toolkit接入微软VR设备Windows Mixed Reality

前言 Windows Mixed Reality 是 Microsoft 用于增强和虚拟现实体验的VR设备,如下图所示: 在国内,它的使用率很低,一把都是国外使用,所以适配起来是相当费劲。 这台VR设备只能用于串流Windows,启动后,会自动连接Window的Mixed Reality程序,然后打开微软的增强现实门户…...

【小聆送书第二期】人工智能时代AIGC重塑教育

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;正文&#x1f4dd;活动参与规则 参与活动方式文末详见。 &#x1f4cb;正文 AI正迅猛地…...

中国移动公网IP申请过程

一、动机 由于从事互联网行业10年&#xff0c;一直从事移动端&#xff08;前端&#xff09;开发工作&#xff0c;未曾深入了解过后端技术&#xff0c;以至于工作10年也不算进入互联网的门。 所以准备在自己家用设备上搭建各种场景的服务器&#xff08;云服务对个人来说成本偏…...

动态获取绝对路径

在Python中&#xff0c;可以使用 os模块 来获取当前工作目录的路径&#xff0c;并使用 os.path.join()函数 将相对路径与当前工作目录结合起来&#xff0c;形成一个动态获取的绝对路径 以下是一个简单的例子&#xff1a; import os# 获取当前工作目录的路径 current_director…...

pytorch中的归一化:BatchNorm、LayerNorm 和 GroupNorm

1 归一化概述 训练深度神经网络是一项具有挑战性的任务。 多年来&#xff0c;研究人员提出了不同的方法来加速和稳定学习过程。 归一化是一种被证明在这方面非常有效的技术。 1.1 为什么要归一化 数据的归一化操作是数据处理的一项基础性工作&#xff0c;在一些实际问题中&am…...

RocketMq源码分析(九)--顺序消息

文章目录 一、顺序消息二、顺序消息消费过程1、消息队列负载2、消息拉取3、消息消费4、消息进度存储 三、总结 一、顺序消息 RocketMq在同一个队列中可以保证消息被顺序消费&#xff0c;所以如果要做到消息顺序消费&#xff0c;可以将消费主题&#xff08;topic&#xff09;设置…...

Windows下nginx的启动,重启,关闭等功能bat脚本

echo off rem 提供Windows下nginx的启动&#xff0c;重启&#xff0c;关闭功能echo begincls ::ngxin 所在的盘符 set NGINX_PATHG:::nginx 所在目录 set NGINX_DIRG:\projects\nginx-1.24.0\ color 0a TITLE Nginx 管理程序增强版CLSecho. echo. ** Nginx 管理程序 *** echo.…...

Python 字典:dic = {} 和 dic = defaultdict(list)之间的区别

d defaultdict(list) 和 d {} 在Python中代表了两种不同类型的字典初始化方式&#xff0c;它们之间有几个关键的区别&#xff1a; 1、类型 d defaultdict(list)&#xff1a;这里使用的是 collections 模块中的 defaultdict 类。它是一个字典的子类&#xff0c;提供了一个默…...

绘图 Seaborn 10个示例

绘图 Seaborn 是什么安装使用显示中文及负号散点图箱线图小提琴图堆叠柱状图分面绘图分类散点图热力图成对关系图线图直方图 是什么 Seaborn 是一个Python数据可视化库&#xff0c;它基于Matplotlib。Seaborn提供了高级的绘图接口&#xff0c;可以用来绘制各种统计图形&#xf…...

airserver mac 7.27官方破解版2024最新安装激活图文教程

airserver mac 7.27官方破解版是一款好用的airplay投屏工具&#xff0c;可以轻松将ios荧幕镜像&#xff08;airplay&#xff09;至mac上&#xff0c;在mac平台上实现视频、音频、幻灯片等文件资源的接收及投放演示操作&#xff0c;解决iphone或ipad的屏幕录像问题&#xff0c;满…...

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑移动式储能调度的配电网灾后多源协同孤岛运行策略》

这篇文章的标题表明研究的主题是在配电网发生灾害后&#xff0c;采用一种策略来实现多源协同孤岛运行&#xff0c;并在这个过程中特别考虑了移动式储能的调度。 让我们逐步解读标题的关键词&#xff1a; 考虑移动式储能调度&#xff1a; 文章关注的焦点之一是移动式储能系统的…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...