简述本人项目中常用的Typescript的知识

Typescript

  • Boolean
  • Number
  • String
  • undefined和null
  • void
  • Array
  • 元组
  • Function
  • Object
  • interface
  • Any 类型 和 unknown 顶级类型
  • 枚举
  • 其他高级类型玩法
  • Symbol

Boolean

注意,使用构造函数 Boolean 创造的对象不是布尔值:

let createdBoolean: boolean = new Boolean(1)
//这样会报错 应为事实上 new Boolean() 返回的是一个 Boolean 对象 

事实上 new Boolean() 返回的是一个 Boolean 对象 需要改成

let createdBoolean: Boolean = new Boolean(1)
let booleand: boolean = true //可以直接使用布尔值let booleand2: boolean = Boolean(1) //也可以通过函数返回布尔值

Number

支持十六进制、十进制、八进制和二进制;

let notANumber: number = NaN;//Nan
let num: number = 123;//普通数字
let infinityNumber: number = Infinity;//无穷大
let decimal: number = 6;//十进制
let hex: number = 0xf00d;//十六进制
let binary: number = 0b1010;//二进制
let octal: number = 0o744;//八进制s

String

字符串是使用string定义的

let a: string = '123'
//普通声明//也可以使用es6的字符串模板
let str: string = `dddd${a}`

其中 ` 用来定义 ES6 中的模板字符串,${expr} 用来在模板字符串中嵌入表达式。

undefined和null

let u: undefined = undefined;//定义undefined
let n: null = null;//定义null

void 和 undefined 和 null 最大的区别
与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 string 类型的变量:

//这样写会报错 void类型不可以分给其他类型
let test: void = undefined
let num2: string = "1"num2 = test
//这样是没问题的
let test: null = null
let num2: string = "1"num2 = test//或者这样的
let test: undefined = undefined
let num2: string = "1"num2 = test

null 不能 赋予 void 类型

void

JavaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数

function voidFn(): void {console.log('test void')
}

void 类型的用法,主要是用在我们不希望调用者关心函数返回值的情况下,比如通常的异步回调函数

void也可以定义undefined 和 null类型

let u: void = undefined
let n: void = null;

Array

//类型加中括号
let arr:number[] = [123]
//这样会报错定义了数字类型出现字符串是不允许的
let arr:number[] = [1,2,3,'1']
//操作方法添加也是不允许的
let arr:number[] = [1,2,3,]
arr.unshift('1')var arr: number[] = [1, 2, 3]; //数字类型的数组
var arr2: string[] = ["1", "2"]; //字符串类型的数组
var arr3: any[] = [1, "2", true]; //任意类型的数组

数组泛型
规则 Array<类型>

let arr2: Array<number> = [1, 2, 3]
等同于
let arr1: number[] = [1, 2, 3]

从上面我们可以发现的是,和原生的 js 相比,数组中每个元素的类型都在声明的时候已经绑定好了,所以如果其中插入一些非数字类型的数据,编辑器将会报错。

那如果要使得在数组中可以插入其他类型的数据呢,则可以采用联合类型的方式,比如:

let arr: Array<number | string> = [1, 'abc']
let list: Array<any> = ['test', 1, [],{a:1}]

这样,数组就能包含多种数据类型了

元组

元组是一种特殊的数组,它控制了数组成员的类型和数量,比如:

let tuple: [number, string] = [1, 'abc']

上面代码就控制了三个条件:
数组中只能有两个元素;
数组第一个元素是数字类型;
数组第二个元素是字符串类型;

Function

函数的声明需要给参数添加类型注解,如下:

let add = (a: number, b: number) => a + b
或者
let add = (a: number, b: number): number => a + b // 最后的这个number是对函数返回值类型的注解,不过平时可以省略(TS的类型推断)

函数的声明还有一种形式:(先声明后实现)

let add:  (a: number, b: number) => number
add = (n, m) => n + m

Object

按照 JS 的用法,或许我们觉得可以如下方式声明与操作对象:

let obj: object = { x: 1, y: 2 }
obj['x'] = 2 // 报错,ts中不知道你声明的对象中有x属性

Ts 中应该这样做:

let obj: {x: number, y: number} = {x: 1, y: 2}
obj.x = 2

interface

在typescript中,我们定义对象的方式要用关键字interface(接口),我的理解是使用interface来定义一种约束,让数据的结构满足约束的格式。定义方式如下:

//这样写是会报错的 因为我们在person定义了a,b但是对象里面缺少b属性
//使用接口约束的时候不能多一个属性也不能少一个属性
//必须与接口保持一致
interface Person {b:string,a:string
}const person:Person  = {a:"213"
}//重名interface  可以合并
interface A{name:string}
interface A{age:number}
var x:A={name:'xx',age:20}
//继承
interface A{name:string
}interface B extends A{age:number
}let obj:B = {age:18,name:"string"
}

可选属性 使用?操作符

//可选属性的含义是该属性可以不存在
//所以说这样写也是没问题的
interface Person {b?:string,a:string
}const person:Person  = {a:"213"
}

Any 类型 和 unknown 顶级类型

1.没有强制限定哪种类型,随时切换类型都可以 我们可以对 any 进行任何操作,不需要检查类型

let anys:any = 123
anys = '123'
anys = true

2.声明变量的时候没有指定任意类型默认为any

let anys;
anys = '888'
anys = true

3.弊端如果使用any 就失去了TS类型检测的作用

4.TypeScript 3.0中引入的 unknown 类型也被认为是 top type ,但它更安全。与 any 一样,所有类型都可以分配给unknown

unknow unknow类型比any更加严格当你要使用any 的时候可以尝试使用unknow

//unknown 可以定义任何类型的值
let value: unknown;value = true;             // OK
value = 42;               // OK
value = "Hello World";    // OK
value = [];               // OK
value = {};               // OK
value = null;             // OK
value = undefined;        // OK
value = Symbol("type");   // OK//这样写会报错unknow类型不能作为子类型只能作为父类型 any可以作为父类型和子类型
//unknown类型不能赋值给其他类型
let names:unknown = '123'
let names2:string = names//这样就没问题 any类型是可以的
let names:any = '123'
let names2:string = names   //unknown可赋值对象只有unknown 和 any
let bbb:unknown = '123'
let aaa:any= '456'aaa = bbb

区别2

如果是any类型在对象没有这个属性的时候还在获取是不会报错的
let obj:any = {b:1}
obj.a如果是unknow 是不能调用属性和方法
let obj:unknown = {b:1,ccc:():number=>213}
obj.b
obj.ccc()

枚举

其他高级类型玩法

Symbol

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

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

相关文章

前端初学者的Ant Design Pro V6总结(下)

前端初学者的Ant Design Pro V6总结&#xff08;下&#xff09; 文章目录 前端初学者的Ant Design Pro V6总结&#xff08;下&#xff09;umi 请求相关一个能用的请求配置Service层 TS 类型规范Service层 函数定义umi 请求代理 Proxy umi/max 简易数据流useModel 没有类型提示&…

Linux下超轻量级Rust开发环境搭建:二、安装Helix Editor

创建一个用户命令的目录&#xff1a; $> mkdir ~/.bin 我习惯将用户自己的命令都放在这个.bin目录下。 $> echo "export PATH\$HOME/.bin:\$PATH" >> ~/.bashrc $> source ~/.bashrc 上面两个命令&#xff0c;将.bin目录加入到PATH环境变量上。 …

小程序1rpx边框不完美

问题展示 原因 rpx类似rem&#xff0c;渲染后实际转换成px之后可能存在小数&#xff0c;在不同的设备上多多少少会存在渲染的问题。而1rpx的问题就更加明显&#xff0c;因为不足1个物理像素的话&#xff0c;在IOS会进行四舍五入&#xff0c;而安卓好像统一向上取整&#xff0c…

人工智能|网络爬虫——用Python爬取电影数据并可视化分析

一、获取数据 1.技术工具 IDE编辑器&#xff1a;vscode 发送请求&#xff1a;requests 解析工具&#xff1a;xpath def Get_Detail(Details_Url):Detail_Url Base_Url Details_UrlOne_Detail requests.get(urlDetail_Url, headersHeaders)One_Detail_Html One_Detail.cont…

2023年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题(一)

2023年甘肃省职业院校技能大赛&#xff08;中职教师组&#xff09; 网络安全竞赛样题&#xff08;一&#xff09; &#xff08;总分1000分&#xff09; 目录 模块A 基础设施设置与安全加固 A-1任务一 登录安全加固 A-2任务二 数据库安全策略 A-3任务三 流量完整性 A-4任…

Oracle的JDBC在读取数据时报“流已关闭”异常

在从oracle数据库中读取数据的时候有时候会报“流已关闭”的异常&#xff0c;查询官网发现这是oracle的一个bug&#xff0c;原因是表中有long数据类型的字段。 如果oracle数据库表中有long类型的字段&#xff0c;在从结果集中读取数据的时候&#xff0c;如果long类型的字段不在…

[MySQL--基础]多表查询

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录&#xff1a;生活中最大的挑战就是发现自己是谁。然后&#xff0c;坚定不移地成为那个人。 ⭐个人主页&#xff1a;欧_aita ψ(._. )>⭐个人专栏&#xff1a; 数据结构与算法 MySQL数据库 多表查询 前言多表关系概述&#x1f…

为什么 SQL 不适合图数据库

背景 “为什么你们的图形产品不支持 SQL 或类似 SQL 的查询语言&#xff1f;” 过去&#xff0c;我们的一些客户经常问这个问题&#xff0c;但随着时间的推移&#xff0c;这个问题变得越来越少。 尽管一度被忽视&#xff0c;但图数据库拥有无缝设计并适应其底层数据结构的查询…

leetcode每日一题36

91.解码方法 变形的蜗牛爬塔问题&#xff0c;动态规划 五部曲走起 确定dp数组及下标含义 f(n)代表当前在字符串的第n位时的解码方法数&#xff0c;而因为可以一次性分割&#xff08;解码&#xff09;1位或两位&#xff0c;那么在n位时&#xff0c;假设其上一位为a&#xff0c…

四层LVS与七层Nginx负载均衡的区别

一、四层负载均衡与七层负载均衡&#xff1a; &#xff08;1&#xff09;四层负载均衡&#xff1a; 四层负载均衡工作在 OSI 七层模型的第四层&#xff08;传输层&#xff09;&#xff0c;指的是负载均衡设备通过报文中的目标IP地址、端口和负载均衡算法&#xff0c;选择到达的…

Android防破解重签名方案研究

最近发现有人破解我们的应用&#xff0c;于是研究了一下如何在应用被破解以后&#xff0c;让应用退出的简单实现方案。 很多应用可能会选择加固的方式来实现&#xff0c;但是在海外Google Play上是不允许加固的&#xff0c;因此需要其他策略。 应用被破解以后一般会被修改然后…

赛事回顾 | 首届“智航杯“全国无人机智能算法竞赛落幕

11月28日&#xff0c;首届“智航杯”全国无人机智能算法竞赛实物赛在海南省三亚市成功落下帷幕。此次竞赛自2023年4月启动以来&#xff0c;共有来自全国145所高等院校和50多所企事业单位的1253支团队、3655人报名参赛&#xff0c;最终有6支队伍脱颖而出&#xff0c;入围了实物赛…

Elasticsearch:评估 RAG - 指标之旅

作者&#xff1a;Quentin Herreros&#xff0c;Thomas Veasey&#xff0c;Thanos Papaoikonomou 2020年&#xff0c;Meta发表了一篇题为 “知识密集型NLP任务的检索增强生成” 的论文。 本文介绍了一种通过利用外部数据库将语言模型 (LLM) 知识扩展到初始训练数据之外的方法。 …

阶段四:数据分析与机器学习(掌握NumPy和Pandas库,用于数据处理和分析)

Python的NumPy和Pandas库是数据处理和分析的重要工具。NumPy(Numerical Python)提供了高性能的数值计算工具,适用于大规模多维数组和矩阵的运算。Pandas则提供了强大的数据结构和数据分析工具,使得数据处理和分析变得更加便捷。以下是掌握NumPy和Pandas库的一些建议: 熟悉…

11.9每日一题(无穷比无穷型的极限:提出并消去无穷因子、抓大头、拆多项式)

注&#xff1a;1、 为x的绝对值&#xff0c;因为x趋向负无穷&#xff0c;所以为 -x 2、用有理运算法则拆分式子时&#xff0c;注意判断极限是否存在

Python 网络爬虫(二):HTTP 基础知识

《Python入门核心技术》专栏总目录・点这里 文章目录 1. HTTP 协议简述2. HTTP 请求过程3. HTTP 的结构3.1 请求行3.2 请求头3.3 请求体3.4 状态行3.5 响应头3.6 响应体 4. Cookie 状态管理5. HTTP 请求示例6. 总结 大家好&#xff0c;我是水滴~~ 在准备学习网络爬虫之前&…

React都有哪些hooks?

useState&#xff1a;用于在函数组件中使用状态&#xff08;state&#xff09;。它返回一个数组&#xff0c;第一个元素是当前状态的值&#xff0c;第二个元素是更新状态的函数。可以通过调用这个函数来更新状态的值。 useEffect&#xff1a;用于在函数组件中执行副作用操作&a…

springboot慢性胃炎管理系统-计算机毕设 附源码 35541

SpringBoot慢性胃炎管理系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;医疗行业当然也不例外。慢性胃炎管理系统是以实际运用为开发背景&#xff0c;运用软件工程…

PLC通过485Modbus转Profinet网关与温控表通讯在发酵罐的应用

前提&#xff1a;在自动化控制系统中&#xff0c;PLC通常需要和各种设备进行数据通讯&#xff0c;其中就包括温控表。而这些设备之间的通讯常常需要通过485Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;来实现。 方案&#xff1a;在一些应用场合中&#xff0c;Profi…

Spring Boot 3 整合 Spring Cache 与 Redis 缓存实战

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…