首页  >  文章  >  web前端  >  每个开发人员都应该了解的高级 TypeScript 概念

每个开发人员都应该了解的高级 TypeScript 概念

DDD
DDD原创
2024-11-04 16:20:02732浏览

dvanced TypeScript Concepts Every Developer Should Know

TypeScript 是 JavaScript 的强大超集,它添加了静态类型和其他功能来改善开发体验。虽然许多开发人员熟悉基础知识,但掌握高级 TypeScript 概念可以显着增强编写健壮、可维护和可扩展代码的能力。以下是每个开发人员都应该了解的 10 个高级 TypeScript 概念。

1. 联合类型

联合类型允许变量保存多种类型之一,使您可以灵活地处理不同的数据类型,同时仍然保持类型安全。就像拥有一个多功能工具?️可以处理不同的任务。

Example 1:

let value: string | number;

value = "Hello";
console.log(value); // "Hello"

value = 123;
console.log(value); // 123


Example 2:
type status = "review" | "published" | "expired";

function getJobStatus(status: status): string {
  switch (status) {
    case "review":
      return "Job is on Review";
    case "published":
      return "Job is Published";
    case "expired":
      return "Job is Expired";
    default:
      return "Unknown status";
  }
}

2. 交叉口类型

交集类型将多种类型合并为一种,要求一个变量具有组合类型的所有属性。

interface Person {
  name: string;
  age: number;
}

interface Employee {
  employeeId: number;
}

type Developer = Person & Employee;

const emp: Developer = {
  name: "Alice",
  age: 25,
  employeeId: 12345
};

console.log(emp);

在此示例中,我们定义了两种类型:Person 和 Employee,然后使用交集创建一个结合了 Employee 和 Person 属性的 Developer 类型。这代表了开发人员在组织中的身份和角色。

3. 类型保护

类型保护可以帮助您缩小条件块中变量的类型范围,从而确保类型安全。将他们视为保安保镖?在夜总会,只让合适的人进入。

例子

function isString(value: any): value is string {
  return typeof value === "string";
}

function printValue(value: string | number) {
  if (isString(value)) {
    console.log(value.toUpperCase());
  } else {
    console.log(value.toFixed());
  }
}

printValue("Hello"); // "HELLO"
printValue(123); // "123"

类型保护:因为我们的生活都需要一点安全感。

4. 条件类型

条件类型允许您根据条件创建类型,提供强大的类型转换。这就像一本选择你自己的冒险书?.

例子

type IsString<T> = T extends string ? "Yes" : "No";

type Result1 = IsString<string>; // "Yes"
type Result2 = IsString<number>; // "No"

条件类型非常强大,允许您根据条件创建动态且灵活的类型。

5. 映射类型

映射类型允许您通过对每个属性应用转换将现有类型转换为新类型。

例子

type Readonly<T> = {
  readonly [P in keyof T]: T[P];
};

interface Todo {
  title: string;
  description: string;
}

const todo: Readonly<Todo> = {
  title: "Learn TypeScript",
  description: "Study advanced concepts"
};

// todo.title = "New Title"; // Error: Cannot assign to 'title' because it is a read-only property.


type Nullable<T> = {
  [P in keyof T]: T[P] | null;
};

interface User {
  id: number;
  name: string;
  email: string;
}

type NullableUser = Nullable<User>;

type NullableUser = {
  id: number | null;
  name: string | null;
  email: string | null;
};

// In this example, Nullable transforms each property of User to also accept null.

6. 模板文字类型

模板文字类型允许您通过组合字符串文字来创建类型,使您的类型定义更具表现力。

例子

type Color = "red" | "green" | "blue";
type Brightness = "light" | "dark";

type Theme = `${Brightness}-${Color}`;

const theme1: Theme = "light-red";
const theme2: Theme = "dark-blue";

// const theme3: Theme = "bright-yellow"; // Error: Type '"bright-yellow"' is not assignable to type 'Theme'.

模板文字类型允许您定义必须遵循亮度-颜色模式的主题类型。这就像为您的类型提供了可供遵循的风格指南。

7. 递归类型

递归类型是引用自身的类型,允许您对树和链表等复杂数据结构进行建模。

例子

为树结构创建递归类型:

interface TreeNode {
  value: number;
  left?: TreeNode;
  right?: TreeNode;
}

const tree: TreeNode = {
  value: 1,
  left: {
    value: 2,
    left: { value: 3 },
    right: { value: 4 }
  },
  right: {
    value: 5
  }
};

递归类型:因为有时你需要永远持续下去的类型,就像无限循环(但以一种好的方式)。

结论

TypeScript 是一个强大的工具,掌握这些高级概念可以使您的代码更加健壮、可维护并且非常棒。当您继续探索这些高级功能时,您会发现您的代码变得更加简洁,您的类型定义更加精确,并且您的整体开发工作流程更加顺畅。

其他资源

  • TypeScript 文档
  • TypeScript GitHub 存储库

编码愉快! ?

以上是每个开发人员都应该了解的高级 TypeScript 概念的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn