TS

197 阅读3分钟

基本类型

let name: string = "dolphin";
let age: number = 22;
let isSingle: boolean = true;
let u: undefined = undefined; // 表示变量尚未被赋值
let n: null = null; // 显示将值设为空
null 和 undefined

nullundefined 可以赋值给任何类型,此时可以理解为它们是所有类型的子类型。如果你在 tsconfig.json 中开启了 strictNullChecks 选项,nullundefined 只能赋值给 void 或它们各自的类型。

void 类型

void 类型通常用于函数没有返回值的情况,它表示没有任何类型

function logMessage(message: string): void {
  console.log(message);
}

any 类型

any 类型表示任意类型。使用 any 类型的变量可以赋值为任何类型的值,且不会进行类型检查。这在需要兼容动态类型的代码时有用,但滥用 any 会导致类型安全性丧失。

unknown 类型

unknown 类型是一个更安全的 any 类型。与 any 不同,在将 unknown 类型赋值给其他类型之前,必须先进行类型检查或类型断言

使用之前你若不进行类型检查或类型断言就会报错

function processValue(value: unknown) {
  if (typeof value === "string") {
    console.log(`String value: ${value}`);
  } 
  else if (typeof value === "number") {
    console.log(`Number value: ${value}`);
  } 
  else if (typeof value === "object" && value !== null) {
    console.log("Object value:", value);
  } 
  else {
    console.log("Unknown type");
  }
}
processValue("Hello, world!"); // 输出: String value: Hello, world!
processValue(42);              // 输出: Number value: 42
processValue({ id: 1 });       // 输出: Object value: { id: 1 }
processValue(true);            // 输出: Unknown type

never 类型

never 类型表示永远不会有值的类型。通常用于表示那些总是会抛出错误不会有返回值的函数。因此被赋值会报错,哪怕是 any

function error(message: string): never {
  throw new Error(message);
}

函数类型(Function Type)

函数类型用于定义函数的参数类型和返回类型。

function add(x: number, y: number, z?:number): number {
  return x + y;
}

// 函数类型表达
let addFunc: (a: number, b: number) => number;
addFunc = add;

(a: number, b: number) => number 意思是接受两个 number 参数并返回 number 类型值的函数,要是函数没有 return,就相当于返回 void 类型。参数若是可选,用 ? 表示,这里一定要注意可选参数都是放参数最后的,否则报错。默认参数还是用 = ,和 js 一致,且无关顺序

数组类型(Array Type)

数组类型用于定义一组相同类型的元素,不相同就是接下来的元组类型

let numbers: number[] = [1, 2, 3, 4]; // ‘1’ 也会报错
let strings: string[] = ["hello", "world"];

或者可以使用泛型语法定义数组:<> 符号就表示泛型

let numbers: Array<number> = [1, 2, 3, 4];

元组类型(Tuple Type)

元组类型用于表示已知数量和类型的元素的数组。与数组类型不同,元组中的每个元素类型可以不同。

let tuple: [string, number, boolean] = ["hello", 42, true];

元组的长度是固定的,并且每个位置上的类型是确定的。这在需要表示固定结构的数据时非常有用,例如函数返回多个值的情况。当 push 的元素超出时类型必须是已有的

枚举类型(Enum Type)

枚举类型是用于定义一组命名常量的方式,可以用于表示一组相关的值。

enum Direction {
  Up,
  Down,
  Left,
  Right
}

let dir: Direction = Direction.Up;
console.log(Direction.Up, Direction.Down, Direction.Left, Direction.Right); // 0, 1, 2, 3
console.log(Direction[0], Direction[1], Direction[2], Direction[3]); // Up Down Left Right

枚举的值可以是数字或字符串,默认情况下,从 0 开始自动递增。也可以自定义枚举的值:

enum StatusCode {
  Success = 200,
  NotFound = 404,
  ServerError = 500
}