TypeScript---基本数据类型、高级类型

44 阅读2分钟

TypeScript基本类型一览

image.png

数组类型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才能赋值给它们。 image.png

image.png

高级类型

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