深入浅出 TypeScript(讲师:贺庆阳)
01 为什么学习TS
TS VS JS:
TS带来了什么:
TS推荐:
02 TS基础
基础类型:
TypeScript是一种类型化的编程语言,支持类、接口、泛型和模块等特性。在TypeScript中,有以下基础类型:
-
数字类型(number):表示数字,包括整数和浮点数。
-
字符串类型(string):表示文本字符串,可以使用单引号或双引号。
-
布尔类型(boolean):表示 true 或 false。
-
数组类型(array):表示同一类型元素的数组,可以使用 [] 或 Array 两种语法形式来定义。
-
元组类型(tuple):表示一个已知长度和类型的数组,例如 [string, number] 表示由一个字符串和一个数字组成的元组。
-
枚举类型(enum):表示一组命名的常量序列,默认情况下从0开始编号,也可以手动指定编号。
-
Any类型(any):表示任意类型,可以设置为任意值,包括原始类型、对象类型、函数类型等。
-
Void类型(void):表示没有返回值的函数类型,通常用于定义回调函数。
-
Null和Undefined类型(null和undefined):表示 null 和 undefined 两个特殊的类型,所有类型都可以赋值为null或undefined。
-
Never类型(never):表示永不存在的值的类型,通常用于函数抛出异常或无限循环等场景。
下面是一些基础类型的示例:
let num: number = 123;
let str: string = 'hello';
let flag: boolean = true;
let arr1: number[] = [1, 2, 3];
let arr2: Array<number> = [4, 5, 6];
let tuple: [string, number] = ['world', 2023];
enum Color { Red, Green, Blue };
let color: Color = Color.Red;
let anything: any = 'anything goes';
let nothing: void = undefined;
let nullable: null | string = null;
function neverReturn(): never {
throw new Error('never');
}
需要注意的是,TypeScript中的类型是静态类型,在编译时就已经确定了。这使得TypeScript可以提供更好的开发工具支持和更强的类型检查功能,从而减少了一些常见的运行时错误。
函数类型:
在 TypeScript 中,函数类型是一种类型,可以用来对函数的参数和返回值进行约束。函数类型包括函数声明、函数表达式和箭头函数等多种形式。
下面是几个函数类型的示例:
- 函数声明
function add(x: number, y: number): number {
return x + y;
}
上述代码中,add 函数接受两个参数 x 和 y,都是 number 类型,并返回一个 number 类型的值。
- 函数表达式
let multiply = function(x: number, y: number): number {
return x * y;
};
函数表达式将一个匿名函数赋值给变量 multiply,其函数类型为 (x: number, y: number) => number,表示接受两个参数 x 和 y,都是 number 类型,并返回一个 number 类型的值。
- 箭头函数
let divide = (x: number, y: number): number => x / y;
箭头函数是一种更简洁的函数表达式形式,上述代码定义了一个箭头函数 divide,其函数类型为 (x: number, y: number) => number。它接受两个参数 x 和 y,都是 number 类型,并返回一个 number 类型的值。
除了上述示例,还有一些高级的函数类型,如可选参数、默认参数、剩余参数和函数重载等。这些特性可以更加灵活地定义函数类型,以适应各种编程场景。
interface:
在 TypeScript 中,interface 是一种定义对象类型的方式,可以用来描述一个对象的形状(即属性名和属性值的类型)、方法和类等。
interface 的语法形式为:
interface InterfaceName {
property1: type1;
property2?: type2;
[property3: string]: any;
method1(param1: type3, param2: type4): returnType;
}
其中,InterfaceName 是接口名称,property1、property2 等是属性名称,type1、type2 等是属性值类型,param1、param2 等是方法参数名称,type3、type4 等是方法参数类型,returnType 是方法返回值类型。
下面是几个接口的示例:
- 定义只读属性的接口
interface Person {
readonly name: string;
age: number;
}
上述代码中,Person 接口定义了两个属性:name 是只读属性,类型为 string;age 是可写属性,类型为 number。
- 定义可选属性的接口
interface Car {
brand: string;
model?: string;
}
上述代码中,Car 接口定义了两个属性:brand 是必填属性,类型为 string;model 是可选属性,类型为 string 或者 undefined。
- 定义可索引类型的接口
interface Dictionary {
[key: string]: number;
}
上述代码中,Dictionary 接口定义了一个字符串索引签名,任意字符串都可以作为属性名,属性值必须为 number 类型。