一、为什么要学习ts
ts vs js
TypeScript 是 JavaScript 的超集,它包含了 JavaScript 的所有元素,可以载入 JavaScript 代码运行,并扩展了 JavaScript 的语法。TypeScript 增加了静态类型、类、模块、接口和类型注解等特性。TypeScript 代码需要通过编译器编译为 JavaScript,然后再交由 JavaScript 解析器执行。
二、ts基础
ts数据类型
number 类型用于表示数字,可以是整数或浮点数。例如:let num: number = 123;
string 类型用于表示字符串,可以使用单引号或双引号来定义。例如:let str: string = 'hello';
boolean 类型用于表示布尔值,只有两个值:true 和 false。例如:let isTrue: boolean = true;
null 和 undefined 分别表示空值和未定义。它们的类型分别为 null 和 undefined。例如:let n: null = null; let u: undefined = undefined;
symbol 类型表示独一无二的值。例如:let sym1 = Symbol(); let sym2 = Symbol('key');
数组 类型用于表示一组相同类型的值。可以使用 类型[] 或 Array<类型> 来定义。例如:let arr1: number[] = [1, 2, 3]; let arr2: Array = [1, 2, 3];
对象 类型用于表示一个对象,可以使用接口或类型别名来定义对象的类型,与C语言的结构体相似。
元组(Tuple)类型用来表示一个已知元素数量和类型的数组,各元素的类型不必相同。例如,你可以定义一个元组,它包含一个 string 类型元素和一个 number 类型元素:
let tuple: [string, number];
tuple = ['hello', 123]; // OK
tuple = [123, 'hello']; // Error
函数类型
定义:TS需要定义函数的i/o类型。
输入参数:执行hi默认和可选
输出参数:自动判断输出,默认void
函数重载:可以通过此支持同名不同参
这里解释下老师课上说的函数重载:
函数重载是指根据参数的类型执行不同的函数。多数用于传入不同的参数得到不同的结果。重载分为两个部分(缺一不可):声明和实现。
举个例子,假设我们有一个函数,可以接收string类型相拼接,也可以接收number类型相加。
有一个函数叫做double,它可以接收number类型并返回它的两倍,也可以接收string类型并返回它与自身拼接的结果。
Interface
定义:接口是为了定义对象类型
特点:
可选属性: 几乎等于没有
只读属性: readonly
可以描述函数类型&描述自定义属性
总结:接口非常灵活
类 Class
- 写法和JS差不多,增加了public、 private、 protected修饰符
- 特点:
-
- 抽象类:
-
-
- 只能被继承,不能被实例化
- 作为基类,抽象方法必须被子类实现
-
TS进阶
基础类型&interfacetype的异同
联合类型 |
交叉类型 &
类型断言 as !
类型别名(type VS interface) 定义:给类型起个别名 (类似于c++的引用)
相同点: 都可以定义对象或函数 都允许继承
差异点: interface是 TS 用来定义对象,type 是用来定义别名方便使用; type 可以定义基本类型,interface 不行 ; interface 可以合并重复声明,type 不行;
About泛型(个人理解)
在 TypeScript 中,也可以使用泛型来创建可重用的组件。具体来说,泛型就是在定义函数、接口或类时,使用参数来代替具体的类型。
例如,下面是一个简单的泛型函数示例,用于交换任意两个元素的位置:
function swap<T>(a: T, b: T): void {
let temp: T = a;
a = b;
b = temp;
}
// 使用泛型函数
let x: number = 1, y: number = 2;
swap<number>(x, y); // 交换 x, y 的值
console.log(x, y); // 2, 1
在上面的示例中, 表示这是一个泛型函数,T 表示泛型参数。在使用该函数时,需要指定具体的类型,例如 swap(x, y)。
除了函数外,接口和类也可以使用泛型参数。例如,下面是一个使用泛型参数的接口示例:
interface Box<T> {
value: T;
}
let box: Box<string> = { value: "Hello World" };
console.log(box.value); // "Hello World"
在上面的示例中,Box 表示一个拥有 value 属性的泛型接口,使用时需要指定具体的类型,例如 Box。这样,我们就可以创建一个字符串类型的盒子。
泛型可以带来很多好处,例如提高代码的重用性、泛化数据结构等等。
一些常用的TS(来自青训营的“安酱”大佬的笔记)(自己只听了内容懒得回去截TTT)
泛型工具类型-基础操作符:
- typeof:获取类型
- keyof:获取所有键
- in:遍历枚举类型
- T[k]:索引访问
- extends:泛型约束