查看原文
其他

TS 5.0 Beta:新版装饰器来了!

阿宝哥 全栈修仙之路 2023-02-13

欢迎你阅读 「《重学 TypeScript 3.0》」 系列教程,本系列教程会包含 TypeScript 基础知识、进阶知识、类型体操(精选)、设计模式、核心特性实战和开源项目源码解析 「6」 大专题的内容。

上个月 1 月 26 号 TypeScript 团队发布了 「TypeScript 5.0 Beta」 版,该版本带来了很多新的特性,其中就包含了新的 ECMAScript 装饰器特性。TypeScript 新版本对 Stage 3 装饰器提案[1]进行了实现,本文阿宝哥将带大家一起学习「新版 ES 装饰器」的众多新特性。

装饰器主要有 Class Decorators、Property/Field Decorators、Method Decorators 和 Parameter Decorators 4 种。不同装饰器有不同的应用场景,如果你对 TypeScript 5.0 Beta 版本之前的装饰器还不了解的话,可以阅读 "搞懂 TypeScript 四种装饰器" 这篇文章。

装饰器的本质是一个函数,新版装饰器的定义如下:

type Decorator = (value: Input, context: {
  kind: string;
  name: string | symbol;
  access: {
    get?(): unknown;
    set?(value: unknown): void;
  };
  private?: boolean;
  static?: boolean;
  addInitializer?(initializer: () => void): void;
}) =>
 Output | void;

由以上代码可知,新版装饰器函数支持 valuecontext 两个参数。 InputOutput 分别表示 value 输入参数的类型和函数返回值的类型。每种类型的装饰器都有不同的输入和输出,而 context 对象的值也是取决被装饰的对象,context 对象的相关说明如下:

  • kind:装饰值的类型,可以用来确保装饰器被正确使用。它的值可能是 "class"、"method"、"getter"、"setter"、"field" 或 "accessor"。
  • name:被装饰值的名称,比如类名、属性名或方法名。
  • access:一个对象包含访问该值的 get 和 set 方法。
  • private:该值表示是否为私有类成员。
  • static:该值表示是否为静态类成员。
  • addInitializer:允许用户添加额外的初始化逻辑。

上面的 addInitializer 方法允许我们添加自定义的初始化逻辑,来实现相应的功能。比如,自定义一个方法装饰器,实现为类中的某个方法绑定 this 对象的功能。有关 addInitializer 方法的相关内容,阿宝哥将在后面的部分单独介绍它,接下来我们先来搭建新版装饰器的本地开发环境。

mkdir es-decorator
npm init -y
npm install typescript@beta -D

以上命令成功执行后,将会新建一个 「es-decorator」 目录并安装 「typescript@beta」 依赖。搭建好开发环境,接下来我们先来介绍类装饰器。

提示:Android 平台 1 元 10 个微豆,iOS 平台 1 元 7 个微豆,购买时可切换平台充值。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存