美文网首页
TypeScript 类装饰器的一个例子和使用单步调试搞清楚其运

TypeScript 类装饰器的一个例子和使用单步调试搞清楚其运

作者: 华山令狐冲 | 来源:发表于2021-08-15 09:03 被阅读0次

官方文档

类装饰器的定义如下:

type ClassDecorator = <TFunction extends Function>
  (target: TFunction) => TFunction | void;

接收一个函数,返回一个新的函数。类装饰器本身也是一个函数。

输入参数 target:类的构造器。

返回参数:如果类装饰器返回了一个值,她将会被用来代替原有的类构造器的声明。

因此,类装饰器适合用于继承一个现有类并添加一些属性和方法。
看一个例子:

type Consturctor = { new (...args: any[]): any };

function toString<T extends Consturctor>(BaseClass: T) {
  return class extends BaseClass {
    toString() {
      return JSON.stringify(this);
    }
  };
}

@toString
class C {
  public foo = "foo";
  public num = 24;
}

console.log(new C().toString())
// -> {"foo":"foo","num":24}

运行时调试入口:main.js

main.js 里加载应用开发的 AppModule,作为 bootstrapModule:

AppModule 里启动 AppComponent:

整个 class C 的定义,作为 toString 的输入参数:

在 Angular library tslib.es6.js里的 __decorate 方法,能看到我们自己定义的装饰器 toString:


被装饰器修饰的目标类 class C:


装饰器返回一个新的子类,扩展自基类,并且覆盖了 toString 方法:

这个 tslib.es6.js, 在本地的 node_modules 文件夹里也能找到:

TypeScript decorator 没有什么魔术,还是调用的 Object.defineProperty 这个原生方法:

调用之前:

调用之后,JSON 实现的 toString 方法出现在其原型链上:


更多Jerry的原创文章,尽在:"汪子熙":


相关文章

  • TypeScript 类装饰器的一个例子和使用单步调试搞清楚其运

    官方文档[https://saul-mirone.github.io/a-complete-guide-to-ty...

  • 装饰器4

    装饰器装饰类 使用类装饰器的时候,记得要返回被装饰的类调用的结果装饰器函数 再 init 之前执行 例子1:给类添...

  • TS装饰器初体验,用装饰器管理koa接口

    typescript中的装饰器有很多种,比如类装饰器、方法装饰器、属性装饰器等等,先看看装饰器的定义吧,下面以类装...

  • TypeScript 装饰器

    TypeScript 与 ES6 的装饰器? ES6 的装饰器是一种函数,写成@ + 函数名。它可以放在类和类方法...

  • 装饰器实验

    装饰器实验 说明 ts内包含了四个装饰器,类装饰器、属性装饰器、函数装饰器、参数装饰器,本文中测试一下其的使用。 ...

  • TypeScript基础入门之装饰器(二)

    转发 TypeScript基础入门之装饰器(二) 装饰器求值 如何应用装饰器应用于类内的各种声明的顺序: 对每个实...

  • Python | 装饰器

    使用场景 装饰器 ' @ ' 使用 带参数装饰器 装饰器类

  • TypeScript: 类的装饰器(二)

    类的装饰器执行时机 接上文,我们引出了 TypeScript 类的装饰器后,接下来,去挖掘下它的特性 PS:上文,...

  • 类的装饰器

    装饰器本身是一个函数,因为装饰器是对类进行修饰的,所以是类的装饰器,装饰器通过@符号来使用。 装饰器接受的参数是一...

  • 老法师谈技术 - PHP远程单步调试

    老法师谈技术 - �PHP单步调试方法(xdebug) 在production环境上面使用单步调试的机会其实不多,...

网友评论

      本文标题:TypeScript 类装饰器的一个例子和使用单步调试搞清楚其运

      本文链接:https://www.haomeiwen.com/subject/focrultx.html