为了账号安全,请及时绑定邮箱和手机立即绑定

提升编码效率,你不可不知的十个TypeScript高级特性

TypeScript 改变了开发人员编写可扩展和易于维护的 JavaScript 代码的方式。虽然静态类型和接口等基本功能已经被广泛理解,而一些高级的 TypeScript 概念还能为您的代码带来新的灵活性和强大的功能。以下是每个开发者都应该掌握的 10 个高级 TypeScript 概念,以更好地驾驭这门强大的 JavaScript 超集。

想不想加强你的JavaScript基础并掌握TypeScript?

别错过我这本 电子书:《JavaScript:从ES2015到ES2023》。这本书是现代JavaScript的终极指南,涵盖了ES模块、async/await、代理、装饰器等重要特性,还有更多内容!

此处省略部分内容

1. 泛型(类型):释放重用性

泛型允许你创建可以适用于多种类型的组件、函数和类,同时确保严格的类型安全。这一概念让你的代码更具可重用性和健壮性。

    function wrap<T>(value: T): { value: T } {
      // 这个函数将任何值包裹在一个对象中
      return { value };
    }

    const wrappedString = wrap<string>("TypeScript"); // { value: "TypeScript" }
    // 例如,我们可以将字符串 "TypeScript" 和数字 42 包裹起来
    const wrappedNumber = wrap<number>(42); // { value: 42 }

点击全屏,点击退出全屏

对于需要灵活性和类型安全的库和框架来说,泛型是非常重要的。

此处省略内容

2. 映射类型:转换对象的结构

泛型类型允许你从现有类型创建新类型。这在创建对象类型的只读或可选版本时特别有用。

type ReadOnly<T> = {
  readonly [K in keyof T]: T[K];
};

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

type ReadOnlyUser = ReadOnly<User>; // 只读用户类型,包含只读的id和name属性。

全屏,退出全屏

这一特性是TypeScript类型转换中的关键组成部分。

……

3. 条件类型:创建动态类型

条件类型允许你根据特定条件创建动态适应的类型。它们使用 extends 关键字来指定适应的条件。

    type IsString<T> = T extends string ? "是" : "否";

    type Test1 = IsString<string>; // "是"
    type Test2 = IsString<number>; // "否"

全屏显示,退出全屏

条件类型非常适合用来定义依赖于其他类型的类型,比如自定义 API 或实用工具类型。

……

4. 键值类型和查找类型:动态访问类型信息

keyof 操作符用来创建所有对象属性键的联合类型,而动态属性查找类型可以动态地检索特定属性的类型信息。

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

type UserKeys = keyof User; // 类型UserKeys等于User的键,也就是'id'或'name'
type NameType = User["name"]; // 类型NameType等于User中的'name'属性,也就是字符串类型

进入全屏 退出全屏

这些工具在处理动态对象或创建通用实用函数时非常有用。

省略部分

5. 实用的类型:简化类型转换过程

TypeScript 包含了实用的类型,如 PartialPickOmit,这些可以简化常见的类型转换场景。

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

    type PartialUser = Partial<User>; // 所有属性可选
    type UserIdName = Pick<User, "id" | "name">; // 只包含 id 和 name
    type NoEmailUser = Omit<User, "email">; // 没有 email 属性

点击进入全屏模式 点击退出全屏模式

这些实用类型可以节省时间并减少修改或调整类型时的重复工作。

……

6. 推断关键词:动态提取类型信息

infer 关键字与条件类型来推断,从给定的上下文中推断出类型。

    type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

    function getUser(): User {
      return { id: 1, name: "John", email: "john@example.com" };
    }

    // 获取用户的函数, 返回一个用户对象
    type UserReturnType = ReturnType<typeof getUser>; // 用户

全屏模式 退出全屏

这在图书馆中常用于提取并动态处理类型。


7. 交集类型和并集类型:兼具灵活性与精确性

交集类型(&)和联合类型(|)允许你定义结合或区分多种类型的复合类型。

    type Admin = { role: "admin"; permissions: string[] };
    type User = { id: number; name: string };

    type AdminUser = Admin & User; // 必须同时具备 Admin 和 User 的所有属性
    type AdminOrUser = Admin | User; // 可以是 Admin 也可能是 User

全屏模式 退出全屏

这些类型对于建立复杂数据关系模型非常关键。


8. 类型守卫:运行时细化类型

类型守卫允许你在运行时动态地限制类型。这使得处理联合类型更加安全和可预测。

    function isString(value: unknown): value 是字符串 {
      return typeof value === "string";
    }

    const value: unknown = "Hello, TypeScript";

    if (isString(value)) {
      console.log(value.toUpperCase()); // 可以安全地调用字符串方法
    }

全屏模式 退出全屏

通过优化类型,类型检查器帮助消除运行时错误。


9. 模板字面类型:创建灵活的字符串种类

模板字面类型允许通过字符串模板来创建新的字符串字面类型。

    type 事件类型 = "点击" | "悬停" | "聚焦";
    type 事件处理器 = `on${Capitalize<事件类型>}`; // "onClick" | "on悬停" | "on聚焦"

点击全屏按钮进入全屏模式,点击再次退出全屏模式

此功能特别适用于与API接口、事件处理器和模式等使用结构化字符串的方式进行处理。


10. 装饰器:用于类和方法的元编程技巧

装饰器是 TypeScript 中的一个实验性特性,允许你对类、属性、方法或参数等进行标记和修改。

    function Log(target: Object, propertyKey: string) {
      console.log(`${propertyKey}访问了`);
    }

    class Example {
      @Log
      sayHello() {
        console.log("Hello, world!");
      }
    }

点击全屏来进入全屏,点击退出来退出全屏

尽管装饰器依然处于实验阶段,它们已经在像 Angular 和 NestJS 这样的框架中被广泛用于依赖注入和元数据处理。


让你的 TypeScript 技能更上一层楼

掌握这些高级 TypeScript 概念将帮助你编写更具类型安全性、可扩展且更易维护的代码。不论你是在企业应用还是开源库上工作,这些工具将帮助你写出更清晰、高效的 TypeScript 代码。

想通过学习TypeScript来提高你的JavaScript技能吗?

来看看我的《JavaScript:从ES6到ES2023》电子书。这本书详细介绍了从ES6到ES2023的现代JavaScript特性。掌握现代JavaScript是精通TypeScript的完美基础。

👉 点击这里下载电子书 - JavaScript:从ES2015到ES2023,

javascript-from-es2015-to-es2023

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消