返回

TypeScript 高级用法指南:掌握面试必考重点

前端

TypeScript 的类型系统是一把双刃剑,它既能为开发者带来便利,也能成为一道难以逾越的障碍。本文将深入浅出地介绍 TypeScript 中的几种高级用法,帮助开发者在面试中脱颖而出。

TypeScript 的类型系统是建立在 JavaScript 之上的,它继承了 JavaScript 的动态类型特性,同时也引入了静态类型检查机制。这使得 TypeScript 既能保持 JavaScript 的灵活性,又能规避 JavaScript 中常见的类型错误。

类型推断

类型推断是 TypeScript 最基本的类型检查机制,它可以根据变量的赋值自动推断出变量的类型。例如:

const num = 123;

TypeScript 会自动推断出 num 的类型为 number。

类型保护

类型保护是一种检查变量类型的方法,它可以通过 typeof、instanceof 等运算符来实现。例如:

if (typeof num === "number") {
  // num 是一个数字
}

类型兼容

类型兼容是指两个类型是否可以互相赋值,它可以通过 extends、implements 等来实现。例如:

interface Animal {
  name: string;
}

class Cat implements Animal {
  name: string;
}

const cat: Cat = new Cat();

Cat 类型兼容 Animal 类型,因此可以将 Cat 类型的值赋值给 Animal 类型变量。

高级类型

除了基本类型检查机制之外,TypeScript 还提供了多种高级类型,它们可以帮助开发者编写出更健壮、更易维护的代码。

  • 类型别名 :类型别名可以为类型起一个别名,简化代码书写。例如:
type MyNumber = number;
const num: MyNumber = 123;
  • 接口 :接口可以定义对象的形状,它可以约束对象属性的类型和数量。例如:
interface Person {
  name: string;
  age: number;
}

const person: Person = {
  name: "John",
  age: 30,
};
  • 泛型 :泛型可以定义具有参数化的类型,它可以使代码更具通用性。例如:
function identity<T>(x: T): T {
  return x;
}

const num = identity(123);
const str = identity("hello");
  • 条件类型 :条件类型可以根据条件创建新的类型,它可以增强类型的灵活性。例如:
type IsString<T> = T extends string ? true : false;

const isString: IsString<"hello"> = true;
  • 映射类型 :映射类型可以将一个类型的每个属性映射到另一个类型,它可以简化代码重构。例如:
type Readonly<T> = {
  readonly [P in keyof T]: T[P];
};

const obj = {
  name: "John",
  age: 30,
};

const readonlyObj: Readonly<typeof obj> = obj;

熟练掌握 TypeScript 的高级用法,可以帮助开发者编写出更健壮、更易维护的代码。在面试中,掌握这些高级用法也能让开发者脱颖而出,展现出深厚的 TypeScript 功底。