首页 » 前端 » 正文

typesciprt学习笔记

TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。这意味着TypeScript是JavaScript的超集,它包含了JavaScript的所有元素,并为其添加了可选的静态类型和基于类的面向对象编程。

一、主要特性

  1. 类型批注:TypeScript允许开发者为变量、函数参数和返回值等添加类型批注,这有助于在编译时捕获类型错误,提高代码的健壮性。
  2. 声明文件:TypeScript支持为已存在的JavaScript库添加类型信息的头文件(.d.ts文件),这扩展了它对流行库的支持,如jQuery、MongoDB、Node.js等。
  3. 泛型:泛型允许开发者在定义函数、接口和类时不指定具体类型,而是在使用时指定,这提高了代码的可重用性和灵活性。
  4. 兼容性:TypeScript编译后的代码是纯JavaScript代码,可以在任何支持JavaScript的环境中运行,如浏览器、Node.js等。

二、核心知识点

  1. 基本类型:包括字符串(string)、数字(number)、布尔值(boolean)、数组(Array)、元组(tuple)、枚举(enum)等。
  2. 任意类型:使用any类型可以表示任意类型的值,但在使用时应尽量避免,以保持代码的类型安全性。
  3. 空值类型:void类型表示没有任何类型,通常用于表示函数没有返回值;null和undefined类型分别表示空值和未定义值。
  4. 函数:TypeScript中的函数支持默认参数、可选参数、剩余参数和箭头函数等特性。
  5. 类与接口:TypeScript支持类的定义和继承,以及接口的实现。类可以包含属性、方法、构造函数和修饰符等;接口用于定义对象的形状,可以包含属性、方法以及泛型约束等。
  6. 装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明、方法、访问器、属性或参数上。装饰器使用@expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息作为参数传入。

三、基本语法

1、变量声明和类型注解

对变量的类型限制,是先声明还是后注解,两种写法。

2、函数和箭头函数

3、类型和接口

接口定义对于java同学应该不陌生,它的使用和类型是一样的

通过类来实现接口

这里有个简化操作:我们可以把接口类型作为属性放到类里,所以上面的接口类可以改为

接口也是可以继承的

interface可以定义属性,还可以定义函数

另外,在ts中是可以定义可选值的,只需要多加一个问号

4、命名空间与模块

命名空间是ts特有的,js中没有,关键字是namespace

在这里直接去拿version就不行,为什么呢,其实可以编译一下看它生成的结果

模块和命名空间类似,关键字是module,把上面的例子中的namespace改成module即可,并且编译结果也基本一致。那么这两者有什么区别呢?主要是跟场景有关,命名空间是为了集合某一类的操作,而模块一般用于npm包。

5、数组与元组

数组声明和常量类似,数组多了一个方括号

元组和数组是一样的,用法略有不同

写过react的同学肯定用过这个 const [state, setState] = useState();其实useState()就是一个元组,返回了两个东西,第一个是值,第二个是设置状态的函数。

6、枚举

7、特殊类型any、never、unknown

四、高级特性

1、关键字

typeof在js中用来判断变量的类型,ts中也可以,但是ts还可以以定义的形式拿到类型;

keyof是ts里的,用来获取对象的key

in在ts中和js都有

extends在js中做来做继承

is是ts特有的,用来定义类型保护函数

as是ts特有的,用来做类型断言

const在js中很常见,在ts里还有另一个作用,定义静态枚举

readonly是ts特有的,可以把某个属性变成只读的

publickprivate用来定义公共属性和私有属性

2、泛型

为参数类型提供占位符,从而增加代码的灵活性和复用性。

函数泛型

接口泛型

类泛型

类型别名的泛型

3、常用内置泛型

Partical:手动把对象里字段改成可选;

Required:把对象里的字段改成必选项;

ReadOnly:把对象里的字段都改成只读的;

Recode:声明一个纯对象,属性名的类型由泛型参数决定,值由另一个泛型参数决定;

Pick:从一个对象中挑出指定的属性;

Omit:从一个对象中删除指定的属性;

…还有更多其他内置泛型,可以自行去看,可以帮助我们开发中减少很多代码量

4、高级类型

交叉类型

联合类型

类型保护

五、注意事项

  1. 代码启用严格模式,让ts编译器严格检查代码,避免出错,代码更健壮;
  2. 避免使用any类型,虽然方便使用,但是失去了代码提示的能力,多参数可以用联合类型;
  3. 避免类型断言的滥用,不判断就直接断言,可能会有程序崩溃;
  4. 使用readonly属性和参数,保护属性,避免误操作;
  5. 遵循命名约定;
  6. 使用类型检测工具,对命名和规范进行强约定;
  7. 编写清晰的文档和注释,好的注释能让代码更易读易懂;
  8. 测试用例,出入参数覆盖比例越大,函数或方法越健壮,程序也越稳定。

使用场景

TypeScript非常适合用于大型项目的开发,因为它提供了静态类型检查、代码自动补全、重构等特性,有助于提高开发效率和代码质量。此外,TypeScript还支持为现有的JavaScript库添加类型信息,使得在开发过程中能够更好地利用这些库。

下面有几张图,我们来看下TS在开发过程中对类型检查、代码提示、自动补全等方面的一个效果:


发表评论