基础类型
-
boolean: 代表布尔类型的值,只能为 true 或 false。
-
number: 代表数字类型的值,包括整数和浮点数。
-
string: 代表字符串类型的值,使用单引号或双引号括起来的字符序列。
-
enum: 枚举类型,用于定义一组具名的常量,可以通过枚举成员的名称来引用对应的值。
-
any: 代表任意类型,可以为任何类型的值。
-
unknown: 类似于 any 类型,但是更加安全。当你不确定一个值的类型时,可以将它赋值为 unknown,必须进行类型检查或类型断言后才能使用。
-
void: 代表没有返回值的函数的返回类型。
-
never: 代表永远不会返回的函数的返回类型,或者表示抛出异常或进入无法结束的循环。
-
数组类型: 可以使用类型加上中括号 [] 来表示一个数组,例如
number[]
表示数字类型的数组。 -
元组类型: 元组用于表示一个固定长度的数组,每个元素可以有不同的类型。例如,
[number, string]
表示包含一个数字和一个字符串的元组。
类型声明
-
类型声明是TS非常重要的一个特点
-
通过类型声明可以指定TS中变量(参数、形参)的类型
-
指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错
-
简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值
-
语法:
let 变量: 类型;
let 变量: 类型 = 值;
function fn(参数: 类型, 参数: 类型): 类型{
...
}
-
自动类型判断
-
TS拥有自动的类型判断机制
-
当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型
-
所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明
-
-
number
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
let big: bigint = 100n;
-
boolean
let isDone: boolean = false;
-
string
let color: string = "blue";
color = 'red';
let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${fullName}.
I'll be ${age + 1} years old next month.`;
-
字面量
-
也可以使用字面量去指定变量的类型,通过字面量可以确定变量的取值范围
-
let color: 'red' | 'blue' | 'black';
let num: 1 | 2 | 3 | 4 | 5;
-
any
let d: any = 4;
d = 'hello';
d = true;
-
unknown
let notSure: unknown = 4;
notSure = 'hello';
-
void
let unusable: void = undefined;
-
never
function error(message: string): never {
throw new Error(message);
}
-
object(没啥用)
let obj: object = {};
-
array
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];
-
tuple
let x: [string, number];
x = ["hello", 10];
-
enum
enum Color {
Red,
Green,
Blue,
}
let c: Color = Color.Green;
enum Color {
Red = 1,
Green,
Blue,
}
let c: Color = Color.Green;
enum Color {
Red = 1,
Green = 2,
Blue = 4,
}
let c: Color = Color.Green;
高级类型
1.联合类型 |
使用 |
符号表示,可以将多个类型组合到一起,表示变量可以是多种类型之一。例如,number | string
表示一个变量可以是数字或字符串类型。
2.交叉类型 &
使用 &
符号表示,可以将多个类型合并到一起,表示变量需要同时具备多种类型的特性。例如,A & B
表示一个变量同时具有类型 A 和类型 B 的特性。
3.类型断言
类型断言(Type Assertion): 类型断言用于手动指定变量的类型,通过将变量断言为特定类型,可以获得更精确的类型检查。有两种形式:尖括号语法 <类型>值
和 as 语法 值 as 类型
。例如,let x: any = 'Hello'; let strLength: number = (x as string).length;
在这个例子中,我们通过类型断言将变量 x
断言为字符串类型,然后获取它的长度。
4.类型别名(type VS interface)
定义:给类型起个别名
相同点:
1.都可以定义对象或函数
2.都允许继承
差异点:
1.interface是TS用来定义对象,type是用来定义别名方便使用;
2.type可以定义基本类型,interface不行
3.interface可以合并重复声明,type不行