首页 > 其他分享 >ts 装饰器使用示例

ts 装饰器使用示例

时间:2024-12-09 20:09:51浏览次数:8  
标签:name 示例 ts greeting constructor target 装饰 string

在 TypeScript 中,装饰器是一种特殊类型的声明,它能够被附加到类声明、方法、访问符、属性或参数上。下面是一些常见的装饰器示例:

1. 类装饰器

类装饰器用于类声明之前,用来监视、修改或替换类定义。

function sealed(constructor: Function) {
  Object.seal(constructor);
  Object.seal(constructor.prototype);
}

@sealed
class Greeter {
  greeting: string;
  constructor(message: string) {
    this.greeting = message;
  }
  greet() {
    return `Hello, ${this.greeting}`;
  }
}

2. 方法装饰器

方法装饰器用于方法声明之前,用来监视、修改或替换方法定义。

function enumerable(value: boolean) {
  return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
    descriptor.enumerable = value;
  };
}

class Greeter {
  greeting: string;
  constructor(message: string) {
    this.greeting = message;
  }

  @enumerable(false)
  greet() {
    return `Hello, ${this.greeting}`;
  }
}

3. 访问器装饰器

访问器装饰器用于访问器声明之前,用来监视、修改或替换访问器定义。

function configurable(value: boolean) {
  return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
    descriptor.configurable = value;
  };
}

class Person {
  private _name: string;

  constructor(name: string) {
    this._name = name;
  }

  @configurable(false)
  get name() {
    return this._name;
  }

  set name(newName: string) {
    this._name = newName;
  }
}

4. 属性装饰器

属性装饰器用于属性声明之前,用来监视、修改或替换属性定义。

function readonly(target: any, propertyKey: string) {
  Object.defineProperty(target, propertyKey, {
    writable: false
  });
}

class Person {
  @readonly
  name: string;

  constructor(name: string) {
    this.name = name;
  }
}

5. 参数装饰器

参数装饰器用于参数声明之前,用来监视、修改或替换参数定义。

function logParameter(target: any, propertyKey: string, parameterIndex: number) {
  const metadataKey = `__log_${propertyKey}_parameters`;

  if (Array.isArray(target[metadataKey])) {
    target[metadataKey].push(parameterIndex);
  } else {
    target[metadataKey] = [parameterIndex];
  }
}

class Greeter {
  greeting: string;
  constructor(message: string) {
    this.greeting = message;
  }

  greet(@logParameter name: string) {
    return `Hello, ${name}`;
  }
}

这些示例展示了如何使用装饰器来增强和修改类及其成员。希望这些示例对你有帮助!

标签:name,示例,ts,greeting,constructor,target,装饰,string
From: https://www.cnblogs.com/jocongmin/p/18595951

相关文章

  • docker ps 命令查看容器ports字段为空排查
    目录1.问题描述2.排查过程2.1确认api-server容器端口是64432.2确认windows的6443是不是docker暴漏出来2.3 执行docker inspect命名,继续观察3.问题总结4.问题反思1.问题描述:windowsDockerdestop启用了kubernetes,k8s api-server http://127.0.0.1:6......
  • wtsapi32.dll文件运行异常:Windows平台上的处理指南
    在使用Windows操作系统时,有时你可能会遇到一些与系统文件相关的错误,其中wtsapi32.dll文件运行异常就是一个较为常见的问题。wtsapi32.dll是Windows操作系统中的一个关键动态链接库(DLL)文件,它主要用于支持远程桌面协议(RDP)和其他终端服务相关的功能。当这个文件出现问题时,可能会导......
  • Daily_and_Sports_Activities数据集的详细介绍及训练
    一、Daily_and_Sports_Activities数据集1.数据集介绍该数据集包括19项日常和体育活动的运动传感器数据,每项活动由8名受试者以自己的风格进行5分钟。躯干、手臂和腿部使用五个Xsens-MTx单位。19项活动中的每一项都由8名受试者(4名女性,4名男性,年龄在20至30岁之间)进......
  • Netty 源码分析之 一 揭开 Bootstrap 神秘的红盖头 (服务器端)
    录Netty源码分析之番外篇JavaNIO的前生今世JavaNIO的前生今世之一简介JavaNIO的前生今世之二NIOChannel小结JavaNIO的前生今世之三NIOBuffer详解JavaNIO的前生今世之四NIOSelector详解Netty源码分析之零磨刀不误砍柴工源码分......
  • Netty 源码分析之 一 揭开 Bootstrap 神秘的红盖头 (客户端)
    永顺 2016-10-26阅读 20 分钟41 目录Netty源码分析之番外篇JavaNIO的前生今世JavaNIO的前生今世之一简介JavaNIO的前生今世之二NIOChannel小结JavaNIO的前生今世之三NIOBuffer详解JavaNIO的前生今世之四N......
  • Improved LiDAR Localization Method for Mobile Robots Based on Multi-Sensing
    ImprovedLiDARLocalizationMethodforMobileRobotsBasedonMulti-Sensing哈尔滨工业大学机电工程系机器人与系统国家重点实验室,哈尔滨150001*通讯地址:21b908026@stu.hit.edu.cn刘艳杰、王超*、吴恒、魏彦龙、任美轩、赵长森MDPIRemotesensing摘要:本文通过......
  • GA/T1400视图库平台EasyCVR宇视设备视频平台:RTSP视频流不能在网页端播放的问题与解决
    在现代视频监控系统中,RTSP(实时流协议)是一种广泛应用于网络摄像机的协议,用于控制和传输音视频数据。然而,当尝试在网页端播放RTSP视频流时,我们可能会遇到一系列挑战。本文将探讨这些常见问题及其解决方案,并介绍如何使用GA/T1400视图库平台EasyCVR来有效地处理和播放RTSP视频流。通过......
  • 强化学习:基于课程学习的强化学习算法 —— 《Combining Reward Shaping and Curriculu
    地址:https://www.tesble.com/10.1109/ICTC.2018.8539438我们在四种不同的奖励函数和终止条件下对行走者进行了训练,以评估结合奖励塑形和课程学习的效果。具体如下。1)距离稀疏奖励:行走者到达目标时给予1个奖励,否则为0。2)距离课程奖励:给予行走者的奖励与行走者距离稀疏奖励......
  • VLM-OCR-Demo:一个使用VLM用于OCR任务的示例
    https://www.cnblogs.com/mingupupu/p/18594592 前言上一篇文章TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面中我们构建了一个方便使用TesseractOCR的用户界面,今天构建一个类似的界面,使用SemanticKernel接入视觉模型,测试一下用视觉模型做OCR任务的效果。在......
  • VLM-OCR-Demo:一个使用VLM用于OCR任务的示例
    前言上一篇文章TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面中我们构建了一个方便使用TesseractOCR的用户界面,今天构建一个类似的界面,使用SemanticKernel接入视觉模型,测试一下用视觉模型做OCR任务的效果。在之前的文章使用Tesseract进行图片文字识别的总结中......