【TS】typescript基础知识

一、类型注解

: number就是类型注解,为变量添加类型约束的方式,约定了什么类型,就只能给变量赋什么类型的值

let age: number = 18

二、变量命名规则和规范

命名规则:变量名称只能出现数字,字母,下划线(_),美元符号($),并且不能以数字开头

命名规范:变量名称有意义,推荐使用驼峰命名法(首字母小学,后面每个单词首字母大写)

三、数据类型

原始类型:基本数据类型:number、string、boolean、underfiend、null

//number类型
let size: number = 18
//string类型
let food: string = 'ice cream'
//boolean类型
let isOpen: boolean = true
//underfiend类型
let u: underfiend = underfiend 
//null类型
let n: null = null

对象类型:复杂数据类型
对象类型注解,ts中的对象是结构化的,在使用对象前,可以根据需求,提前设计好对象的结构

//类型注解(对象的结构化类型),建立一种契约,约束对象的结构,类型注解中键值对的值为类型
let person : {
name:string;
age: number
}
//ts中的对象
person = {
name:'llh';
age: 36
}

对象方法的类型注解:

let p1 :{
sayHi:()=>void //无参数无返回值
}
let p1 = {
sayHi:function(){
console.log(1)
}
}

let p2: {
sing:(name:string) => void   //有参数无返回值
}
let p2 = {
sing:function(name: string){
console.log(2)
}
}

let p3 :{
sum: (num1:number,num2:number) => number  //有参数有返回值
}
let p3 = {
sum:function(num1:number,num2:number){
return num1 + num2
}
}

数组对象

let nums: number[] = [10,20,30,40,]
let sum: number = 0
for(let i = 0,u<nums.length,i++){
sum+=nums[i]
console.log(sum) //100
}

forEanch的回调函数,是否需要为参数或返回值指定类型注解?
不需要,此处的回调函数,是作为forEach方法的实参传入,不应该指定类型注解
ts创建forEach方法的时候,就已经指定好了forEach方法的参数以及参数的类型注解
如:

function forEach(callbackfn:(value:string,index: number)=>void)

forEach(function(value,index){})

四、接口的使用

直接在对象名称后写类型注解,1代码结构不简洁 2无法复用类型注解
如:

let p1 :{
name: string,
age: number,
sayHi:()=>void 
} = {
name:'llh',
age:36,
sayHi:function(){
console.log(1)
}
}


let p2 :{
name: string,
age: number,
sayHi:()=>void 
} = {
name:'fdb',
age:16,
sayHi:function(){
console.log(1)
}
}

使用接口,为对象的类型注解命名,并为代码建立契约来约束对象的结构,接口名称约定以I开头
语法:

interface IUser {
name: string
age: number
}

使用:

let p1: IUser  = {
name:'llh',
age:36,
sayHi:function(){
console.log(1)
}
}
let p1: IUser  = {
name:'fdb',
age:16,
sayHi:function(){
console.log(1)
}
}

五、TS类型推论

在TS中,某些没有明确指出类型的地方,类型推论会帮助提供类型,类型注解可省略不写
使用场景:
1、声明变量并初始化时

interface IUser {
name: string
}
let age: number = 18
如果改成以下写法也可以
let age = 18 

类型推论给出来的还是number,类型推论根据值推论出是数值类型
在这里插入图片描述

let person: IUser ={
name:'lilianhua'
}
等同于
let person ={
name:'lilianhua'
}

如果先声明变量后赋值,则不会类型推论,如:

let num ;
num = 12

any代表任意类型
在这里插入图片描述
2、决定函数返回值时

function sum (num1: number,num2: number): number{
return num1 + num2
}
sum(1,6)

等同于:
function sum (num1: number,num2: number){
return num1 + num2
}
sum(1,6)

TS会根据rerurn后面返回的内容推论出函数返回值的类型,如果return 后面的是true,那函数返回值就变成了boolean
在这里插入图片描述

六、TS类型断言

调用querySelector()通过id获取DOM元素时,拿到的元素类型都是Element。因为无法根据id来确定元素的类型,所以该方法返回了一个宽泛的类型,元素类型(Element)
元素类型只包含所有元素共有的属性和方法,如id属性,但是如果是img标签,则拿不到img元素的src属性

类型断言可以手动指定更加具体的类型
语法:

值 as 更具体的类型

如:

let img = document.querySelector('#image')
改为
let img = document.querySelector('#image') as HTMLImageElement
意为:我们确定id="image"的元素是图片元素,我们将类型指定为HTMLImageElement

小技巧:通过console.dir()打印DOM元素,在属性的最后面,即可看到该元素的类型

console.dir(img)

在这里插入图片描述

七、TS对象枚举

ts枚举 enum 枚举名称 {成员1,成功2,…},约定枚举名称,成员名称以大写字母开头

enum Gender {Female,Male}

枚举使用,枚举是一种类型,因此可以作为变量的类型注解

enum Gender {Female,Male}
let userGender: Gender

访问枚举Gender 中的成员,作为变量userGender的值,枚举成员只读,不可编辑

enum Gender {Female,Male}
let userGender: Gender = Gender.Famale
userGender = userGender.Famale ? Gender.Famale :Gender.Male

枚举成员是有值的,默认为从0开始自增的数值,枚举成员的值为数字的枚举,称为数字枚举

enum Gender {
Female,//0
Male,//1
a,//2
b,//3
c//4
}

枚举成员可以初始化值

enum Gender {
Female = 1,
Male = 2,
a = 44,
b = 55,
c = 66
}

枚举成员的值为字符串的枚举,称为字符串枚举,字符串枚举没有自增行为,因此每个成员必须有初始值

enum Gender {
Female = '女',
Male = '男',

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python rtsp 硬件解码 二

上次使用了python的opencv模块 述说了使用PyNvCodec 模块&#xff0c;这个模块本身并没有rtsp的读写&#xff0c;那么读写rtsp是可以使用很多方法的&#xff0c;我们为了输出到pytorch直接使用AI程序&#xff0c;简化rtsp 输入&#xff0c;可以直接使用ffmpeg的子进程 方法一 …

DNQ算法原理(Deep Q Network)

1.强化学习概念 学习系统没有像很多其它形式的机器学习方法一样被告知应该做出什么行为 必须在尝试了之后才能发现哪些行为会导致奖励的最大化 当前的行为可能不仅仅会影响即时奖励&#xff0c;还会影响下一步的奖励以及后续的所有奖励 每一个动作(action)都能影响代理将来的…

手机无人直播软件,有哪些优势?

近年来&#xff0c;随着手机直播的流行和直播带货的市场越来越大&#xff0c;手机无人直播软件成为许多商家开播带货的首选。在这个领域里&#xff0c;声音人无人直播系统以其独特的优势&#xff0c;成为市场上备受瞩目的产品。接下来&#xff0c;我们将探讨手机无人直播软件给…

OpenCV中QR二维码的生成与识别(CIS摄像头解析)

1、QR概述 QR(Quick Response)属于二维条码的一种&#xff0c;意思是快速响应的意思。QR码不仅信息容量大、可靠性高、成本低&#xff0c;还可表示汉字及图像等多种文字信息、其保密防伪性强而且使用非常方便。更重要的是QR码这项技术是开源的&#xff0c;在移动支付、电影票、…

Elasticsearch Split和shrink API

背景&#xff1a; 尝试解决如下问题&#xff1a;单分片存在过多文档&#xff0c;超过lucene限制 分析 1.一般为日志数据或者OLAP数据&#xff0c;直接删除索引重建 2.尝试保留索引&#xff0c;生成新索引 - 数据写入新索引&#xff0c;查询时候包含 old_index,new_index 3.…

内容分发网络CDN与应用程序交付网络ADN之间的异同

当您想要提高网站性能时&#xff0c;需要考虑许多不同的配置和设施&#xff0c;CDN和ADN是我们常遇见的几种选项之一。“CDN”指“内容分发网络”&#xff0c;而“ADN”指“应用程序交付网络”&#xff0c;但他们两者很容易被混淆&#xff0c;虽然它们的功能和作用都有较大差异…

使用多个神经网络进行细菌分类(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

vellum (Discovering Houdini VellumⅡ柔体系统)学习笔记

视频地址&#xff1a; https://www.bilibili.com/video/BV1ve411u7nE?p3&spm_id_frompageDriver&vd_source044ee2998086c02fedb124921a28c963&#xff08;搬运&#xff09; 个人笔记如有错误欢迎指正&#xff1b;希望可以节省你的学习时间 ~享受艺术 干杯&#x1f37b…

[Mac软件]AutoCAD 2024 for Mac(cad2024) v2024.3.61.182中文版支持M1/M2/intel

下载地址&#xff1a;前往黑果魏叔官网 AutoCAD是一款计算机辅助设计&#xff08;CAD&#xff09;软件&#xff0c;目前已经成为全球最受欢迎的CAD软件之一。它可以在二维和三维空间中创建精确的技术绘图&#xff0c;并且可以应用于各种行业&#xff0c;如建筑、土木工程、机械…

【操作系统】24王道考研笔记——第三章 内存管理

第三章 内存管理 一、内存管理概念 1.基本概念 2.覆盖与交换 覆盖技术&#xff1a; 交换技术&#xff1a; 总结&#xff1a; 3.连续分配管理方式 单一连续分配 固定分区分配 动态分区分配 动态分区分配算法&#xff1a; 总结&#xff1a; 4.基本分页存储管理 定义&#xf…

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

VoxWeekly|The Sandbox 生态周报|20230821

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布&#xff0c;对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容&#xff0c;欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter&#xff0c;并加入 Discord 社区&#xf…

01、Cannot resolve MVC View ‘xxxxx前端页面‘

Cannot resolve MVC View ‘xxxxx前端页面’ 没有找到对应的mvc的前端页面。 代码&#xff1a;前端这里引入了 thymeleaf 模板 解决&#xff1a; 需要添加 thymeleaf 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>s…

基于nginx禁用访问ip

一、背景 网络安全防护时&#xff0c;禁用部分访问ip,基于nginx可快速简单实现禁用。 二、操作 1、创建 conf.d文件夹 在nginx conf 目录下创建conf.d文件夹 Nginx 扩展配置文件一般在conf.d mkdir conf.d 2、新建blocksip.conf文件 在conf.d目录新建禁用ip的扩展配置文…

DevExpress WPF HeatMap组件,一个高度可自定义的热图控件!

像所有DevExpress UI组件一样&#xff0c;HeatMap组件针对速度进行了优化&#xff0c;包括数十个自定义设置和高级API&#xff0c;因此用户可以快速将美观的数据可视化集成到下一个WPF应用程序中。 P.S&#xff1a;DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满…

vscode里配置C#环境并运行.cs文件

vscode是一款跨平台、轻量级、开源的IDE, 支持C、C、Java、C#、R、Python、Go、Nodejs等多种语言的开发和调试。下面介绍在vscode里配置C#环境。这里以配置.Net SDK v5.0&#xff0c;语言版本为C#9.0&#xff0c;对应的开发平台为VS2019&#xff0c;作为案例说明。 1、下载vsc…

文件四剑客

目录 前言 一、正则表达式 二、grep 三、find 四、sed 五、awk 前言 文件四剑客是指在计算机领域中常用的四个命令行工具&#xff0c;包括awk、find、grep和sed。它们在处理文本文件和搜索文件时非常强大和实用。 1. awk是一种强大的文本处理工具&#xff0c;它允许用户根据指…

数据结构——栈和队列

栈和队列的建立 前言一、栈1.栈的概念2.栈的实现3.代码示例&#xff08;1&#xff09;Stack.h&#xff08;2&#xff09;Stack.c&#xff08;3&#xff09;Test.c&#xff08;4&#xff09;运行结果&#xff08;5&#xff09;完整代码演示 二、队列1.队列的概念2.队列的实现3.代…

ps吸管工具用不了怎么办?

我们的办公神器ps软件&#xff0c;大家一定是耳熟能详的吧。Adobe photoshop是电影、视频和多媒体领域的专业人士&#xff0c;使用3D和动画的图形和Web设计人员&#xff0c;以及工程和科学领域的专业人士的理想选择。Photoshop支持宽屏显示器的新式版面、集20多个窗口于一身的d…

软件测试技术分享丨遇到bug怎么分析?

为什么定位问题如此重要&#xff1f; 可以明确一个问题是不是真的“bug” 很多时候&#xff0c;我们找到了问题的原因&#xff0c;结果发现这根本不是bug。原因明确&#xff0c;误报就会降低 多个系统交互&#xff0c;可以明确指出是哪个系统的缺陷&#xff0c;防止“踢皮球…