TypeScript基本类型一览
数组类型number
TypeScript 中所有数字都属于 number 类型,包括整数、浮点数、十六进制、八进制、二进制等
let age:number = 20
字符串类型 string
字符串类型用于表示文本信息,可以用单引号或双引号定义。
let name:string = 'Tom'
null 与 undefined
null:‘空值’,undefined:'未定义'
any类型
表示允许该变量为任意类型
unknown类型
是any的安全替代方案。使用前必须进行类型检查
never类型
表示永远不会发生值的类型,常用于抛出异常或无限循环的函数
使用场景
- 抛出异常
- 无限循环的函数
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {}
}
void类型
表示没有返回值的函数,或者变量不能赋任何值(除了undefined和null)
function a():void{
console.log(123)
}
let a:void = undefined
any、unkonwn、never的区别
类型安全性
any类型:使用any类型时,可以对变量执行任何操作,包括访问任何属性和方法,调用任何函数,而TS编译器不会提供任何类型检查或错误提示。
赋值和操作
any类型的变量可以赋值给任何其他类型的变量 unknown类型的变量不能直接复制给unknown之外的类型,除非进行了类型断言或类型守卫。 never类型是任何类型的子类型,可以赋值给任何类型。没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。
类型兼容性
any是所有类型的超集,可以与任何类型兼容
unknown是所有类型的子集,只有当其他类型是any或者使用了类型守卫时,unknown才能赋值给它们。
高级类型
1、交叉类型(&)
交叉类型是将多个类型合并为一个类型。语法: T & U
type User = { name: string; age: number };
type Admin = { role: string; isAdmin: true };
type SuperUser = User & Admin;
// SuperUser 类型包含了 User 和 Admin 类型的属性
2、联合类型(|)
联合类型表示一个值可以属于多个类型之一。
type Result = number | string;
// Result 变量可以存储数字或字符串
3、映射类型
映射类型允许您通过旧类型的属性来创建新类型。它通常与泛型一起使用,可以用于批量更改或添加属性。
type Options = {
readonly id: number;
title?: string;
};
type MutableOptions = {
-readonly [P in keyof Options]: Options[P];
};
// MutableOptions 移除了 id 属性的只读修饰符,但保留了其他属性
4、条件类型
条件类型是 TypeScript 中的高级类型,它允许根据条件选择不同的类型。它常用于泛型和复杂类型逻辑。
type IsString<T> = T extends string ? true : false;
type A = IsString<string>; // true
type B = IsString<number>; // false