1、深入掌握TS

news/2025/2/11 15:12:32/

环境搭建

npm init -y
yarn add typescript -D
tsc --init

优势

  • 编译时静态类型检测
  • 自动提示更清晰明确
  • 引入了泛型和一系列的ts特有类型
  • 强大的d.ts文件
  • 轻松编译成js文件
  • 灵活性高

类型注解

let data:number

类型推导

let number = 30

常用的24种ts类型

基本类型

number, string, boolean, symbol, null, undefined

根类型

Object:除了null 和 undefined不能赋值其他都可以
{}: Object的简写方式

对象类型

Array, object, function

枚举

enum:即是数据类型,也是变量
为什么要用枚举?方法参数不能定义为具体类型,只能初级使用number string基本类型替代,降低了代码的可读性和可维护性

enum EnumTest {One = 1Two
}
//底层 数字枚举 双向映射
EnumTest[EnumTest["One"] = 1] = "One"
EnumTest[EnumTest["Two"] = 2] = "Two"enum EnumTest2 {One="one"Two = "two"
}
// 底层
EnumTest2["One"] = "one"
EnumTest2["Two"] = "two"

好处:

  • 有默认值和可以自增值,节省编码时间
  • 语义更清晰可读性更强
  • 因为枚举是一种值类型的数据类型方法参数可以明确参数类型为枚举类型

其他特殊类型

  • any
  • unknown
  • never:使用never 避免出现未来扩展新的类没有对应类型的实现且就是写出类型绝对安全的代码
  • void
  • 元组(tuple)
  • 可变元组

合成类型

联合类型

let str: string|number = 'abc'

交叉类型

type Obj1 = {username: string}
type Obj2 = {age: number}
let obj1:Obj1 = {username: 'abc'}
let obj2:Obj2= {age: 23}let obj3: Obj1 & Obj2 = {username: 'a', age: 18}let string2: string & number = 3 // never 不存在 x

字面量数据类型

type Num = 1 | 2| 3
const n: Num = 1

any,unknown 的两点区别和应用场景

相同点

any和unknown可以是任何类的父类(等号左边),所以任何类型的变量都可以赋值给any类型或者unknown类型的变量

不同点

  1. any也可以是任何类的子类(等号右边),但unknown不可以,所以any类型的变量可以赋值给其他类型的变量
  2. 不能拿unknown类型变量来获取任何属性和方法,但any类型的变量可以获取任意名称的属性和任意名称的方法
// 任何类型的父类
let num: string = 'a'
let data:any = num// 任何类型的子类
let data:any=[1,2]
let num:number = data

接口和应用场景

另一种定义对象类型的类型
应用场景:

  • 一些第三方包或者框架底层源码中有大量的接口类型
  • 提供方法的对象类型的参数时使用
  • 为多个同类别的类提供统一的方法和属性声明

如何定义接口
接口继承
新的接口只是在原来接口继承之上增加了一些属性或方法,这时就用接口继承

可索引签名

interface Product {name: stringprice: numberaccount: number[x: string]: any // 可索引签名
}
// 可索引签名一定要兼容所有属性的类型 一般可以用any

接口重名合并

interface Product{name: string
}
interface Product{price: number
}
// 相当于
interface Product{name: stringprice: number
}

索引访问签名

interface Product{name: string
}
type A = Product["name"] // string 

哪些类型可以接受undefined的值

any、unknown、undefined

哪些类型可以接受null的值

any、unknown、null

函数类型

 type TypInfoFun = (s: string, age: number) => number

rest参数

 type TypInfoFun = (s: string, age: number, ...rest:any) => number

http://www.ppmy.cn/news/383392.html

相关文章

点击el-cascader与tags联动

<el-cascader v-model"queryData.jglx" :options"zclxOption" :props"zclxProps":show-all-levels"false" clearableplaceholder"请选择"ref"jglxRef"change"handleJglxChecked" ></el-cascad…

高端产品销量遥遥领先,九号电动引领行业新风向

2023年3月23日&#xff0c;鲁大师联合艾瑞第二年发布《中国两轮电动车行业白皮书》&#xff0c;对中国电动两轮车行业进行梳理。 在雅迪、爱玛、台铃等几大传统电动两轮车巨头的“层层围剿”下&#xff0c;九号电动以绝对领先的趋势突出重围&#xff0c;整个2022年实现电动两轮…

短出行日渐成熟,电动两轮车迎来下半场

现代化社会中的出行交通方式变得更为便捷&#xff0c;选择也更多元化&#xff0c;在短距离出行这一场景中&#xff0c;人们往往选择更轻量化的交通工具——电动两轮车。 而我国电动两轮车市场从2019年开始实行《电动自行车安全技术规范》所规定的强制性国家标准&#xff0c;这…

中国电子学会2023年05月份青少年软件编程Python等级考试试卷四级真题(含答案)

2023-05 Python四级真题 分数&#xff1a;100 题数&#xff1a;38 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 下列程序段的运行结果是&#xff1f;&#xff08;A&#xff09;&#xff08;2分&#xff09; def s(n):if n0:return 1else:return…

【算法与数据结构】142、LeetCode环形链表 II

文章目录 一、题目二、哈希法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、哈希法 思路分析&#xff1a;这道题也可以用双指针法去解&#xff0c;这里我介绍一种哈希法。利用set集合的值不可重复的特性。…

自动驾驶专题介绍 ———— 激光雷达标定

文章目录 介绍激光雷达与激光雷达之间的外参标定激光雷达与摄像头的标定 介绍 激光雷达在感知、定位方面发挥着重要作用。跟摄像头一样&#xff0c;激光雷达也是需要进行内外参数标定的。内参标定是指内部激光发射器坐标系与雷达自身坐标系的转换关系&#xff0c;在出厂之前就已…

红帽认证常见答疑(二):电脑配置、实验环境和考试环境、可以自学吗

学习红帽需要配置什么样的电脑&#xff1f; RHCE推荐学员自己的电脑内存在16G左右&#xff0c;RHCA推荐学员电脑内存在32-64G&#xff0c;且最好配置128G以上的固态硬盘&#xff0c;如果自己没有该配置的电脑&#xff0c;誉天可以提供远程学习环境&#xff0c;可以随时随地连接…

Python multiprocessing 模块

本节主要介绍 multiprocessing 多进程模块&#xff0c;由于 threading 多线程模块无法充分利用电脑的多核优势&#xff0c;而在实际开发中会对系统性能有较高的要求&#xff0c;就需要使用多进程来充分利用多核 cpu 的资源&#xff0c;下面详细介绍 Python 中的 multiprocessin…