TypeScript:访问器装饰器

TypeScript 装饰器 装饰器本质是一种特殊的函数,它可以对:类、属性、方法、参数进行扩展,同时能让代码更简洁。装饰器自2015年在中被提出到现在,已将近10年。截止目前,装饰器依然是实验性特性 ,需要开发者手动调整配置,来开启装饰器支持。装饰器有 5 种:类装饰器、属性装饰器、方法装饰器、访问器装饰器、参数装饰器。备注:虽然中可以直接使用**类装饰器**,但为了确保其他装饰器可用,现阶段使用时,仍建议使用配置来开启装饰器支持,而且不排除在来的版本中,官方会进一步调整装饰器的相关语法! 阅读详情

回顾访问器

回顾学习编程的时候,碰到一些名词总是很困惑,毕竟我们自己想一个网名都要想很久,何况是一种代码规范名称,那么我们今天的主角就是 访问器。

用语言去描绘一种事物,你得先知道它是干什么的,有什么用

在类里边,有属性,有方法,那我们在实例化对象后,调用对象的属性和方法就是在访问对象的属性和方法:

class Phone {
  public color: string = "green";
  public size: number = 15;

  call() {
    console.log("call");
  }
}

const p = new Phone();
console.log(p.color); // green
console.log(p.size); // 15
p.call(); // call

那我们在对象外部修改对象的属性,它也是一种访问:

class Phone {
  public color: string = "green";
  public size: number = 15;

  call() {
    console.log("call");
  }
}

const p = new Phone();
p.color = "yellow";
console.log(p.color); // yellow

这就是访问的两种形式,也就对应访问器的定义的 getter 和 setter。那么访问器也是一种函数,下面我们将代码改成访问器的形式:

class Phone {
  private _color: string = "green";

  get getColor(): string {
    return this._color;
  }

  set setColor(color: string) {
    this._color = color;
  }
}

const p = new Phone();
p.setColor = "yellow";
console.log(p.getColor);

可以看到访问器的定义方式是在函数前面加 get 或 set,调用方式和调用属性一样,不需要加括号。那么访问器看似和普通的属性调用一样,结果也一样,到底有什么用呢!我们看,在没有使用访问器的时候,如果属性是 public 的时候,外部可以随意访问,随意修改,而且是一步就能修改了,中间没有任何可处理的空间

class Phone {
  public color: string = "green";
}

const p = new Phone();
p.color = "yellow";
console.log(p.getColor); // yellow

有了访问器,我们可以对类的属性进行一些预处理,这里,访问器相当于对属性进行一层包装,使得属性的使用性变强,如下代码,我们对对象外部修改 _color 做了长度的限制,长度没超过 10 将不会改变 _color 属性

class Phone {
  private _color: string = "green";

  get getColor(): string {
    return this._color;
  }

  set setColor(color: string) {
    if (color.length < 10) {
      return;
    }
    this._color = color;
  }
}

const p = new Phone();
p.setColor = "yellow";
console.log(p.getColor); // green

访问器装饰器 VS 方法装饰器

在了解了访问器的后,我们来看访问器装饰器,那么既然访问器也是一个函数,那么它的用法和方法装饰器是一样的(参考上文 TypeScript:方法装饰器
),但其中又有点区别,我们看下面代码:

function addDecorator(
  target: any,
  key: string,
  descriptor: PropertyDescriptor
) {
  console.log("target   ->", target);
  console.log("key      ->", key);
  console.log("descript ->", descriptor);
}

class Phone {
  private _color: string = "green";

  get getColor() {
    return this._color;
  }

  @addDecorator
  set setColor(color: string) {
    this._color = color;
  }
}

运行代码,结果如下:

这里我们没有对 get 做装饰器,所以 get 是undefined

注意 TypeScript 不允许同时装饰一个成员的 get 和 set 访问器。取而代之的是,一个成员的所有装饰的必须应用在文档顺序的第一个访问器上。这是因为,在装饰器应用于一个属性描述符时,它联合了 get 和 set 访问器,而不是分开声明的。

看访问器的装饰器属性,我们来对比下方法装饰器的属性:

function addDecorator(
  target: any,
  key: string,
  descriptor: PropertyDescriptor
) {
  console.log("target   ->", target);
  console.log("key      ->", key);
  console.log("descript ->", descriptor);
}

class Phone {
  private _color: string = "green";

  get getColor() {
    return this._color;
  }

  set setColor(color: string) {
    this._color = color;
  }

  @addDecorator
  call() {}
}

那么运行的结果如下:

对比结果:方法装饰器的 descriptor 有 value 和 witable 属性,但没有 get 和 set 属性;访问器装饰器有 get 和 set 属性,但没有 value 和 witable 属性。
原文链接

TypeScript:装饰器 typescript:装饰器 阅读详情

相关推荐

TypeScript 学习笔记(四):装饰器与高级编程技巧

在本篇学习笔记中,我们深入探讨了 TypeScript 中的装饰器及其应用,同时介绍了一些高级编程技巧,如高级类型操作和模块化编程。通过掌握这些高级特性和技巧,你可以编写出更具表现力、可维护性和复用性的代码。下一篇学习笔记将探讨 TypeScript 中的异步编程与错误处理,帮助你在实际项目中更好地处理异步操作和错误。希望你能继续关注本系列的学习笔记,进一步提升 TypeScript 编程技能。

Programming Talk 951

python 类装饰器和函数装饰器区别_Python 中的装饰器详解(@decorator、装饰器函数、装饰器类)...

一切皆对象的思想要理解装饰器,首先需要理解 Python 中函数也是对象的思想。1) 函数作为对象def hi():return "hi"greet = hi# 可以将一个函数赋值给一个变量# 没有使用小括号,因为不是在调用hi函数# 而是在将它放在greet变量里头print(greet()) # 输出: 'hi'# 如果删掉旧的hi函数,print(greet())依然可以正常运行del hi...

weixin_39856709的博客 419

【TypeScript】深入学习TypeScript装饰器

本篇文章将深入去讲解TypeScript中的装饰器,这也许会是你看过的最全面最细致的TypeScript,关注博主学习TypeScript不迷路!!!

前端之行,任重道远! 7364

TypeScript函数

函数是JavaScript应用程序的基础,他帮你实现抽象层,模拟类,信息隐藏和模块。在TypeScript里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义,行为的地方。TypeScript为JavaScript函数添加了额外的功能,让我们可以更容易地使用。

归兮的博客 828

akshare 布林通道策略

import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'.

qq_26742269的博客 5342

Java写一条吃满屏幕的贪吃蛇(A*自动寻路算法和一些简单的策略) 二

上一篇文章介绍了一条贪吃蛇的简单实现,这一篇介绍贪吃蛇的自动寻路算法 ,说是自动寻路其实也就是一种遍历地图的算法,如果玩过游戏肯定知道游戏里面一般会有自动寻路功能,贪吃蛇的自动寻路算法也就是实现这个功能。下面慢慢介绍这种算法吧。    最开始,我没有在网上找资料的时候,我对于设计寻路算法的看法是遍历整个地图,将障碍物做上标记,然后找一条能够到达目的地的线路就可以了。所以最开始我用了特别暴力的方式来...

Sober_yang的博客 3632

TypeScript基础(四)扩展类型 - 类

TypeScript是一种静态类型的编程语言,它是JavaScript的超集,可以编译成纯JavaScript代码。TypeScript引入了类的概念,使得开发者可以使用面向对象的方式来编写代码。本文将介绍TypeScript的类、继承、访问修饰符和访问器的用法。

俊刚的博客 1856

网络攻防实验——网络监听

利用CAIN实现ARP监听。

Trieyes_of_feng的博客 3197

TypeScript中的装饰器是什么,可以用于什么?

在TypeScript中,装饰器(Decorators)是一种特殊类型的声明,它们可以动态地添加属性或修改现有属性在类声明、方法、属性或参数上。在这个例子中,rebuildIndexes方法首先被expensive装饰器标记为昂贵的方法,然后被adminOnly装饰器标记为只有管理员才能修改的方法。装饰器是一种函数,它允许你在不修改原始类定义的情况下,给类添加或修改行为。在这个例子中,我们定义了一个名为sealed的装饰器,它将一个sealed属性添加到了类MyClass的原型上。参数装饰器用于修改参数。

alive_new的博客 472

2016域控服务器迁移,WIN Server2016 域服务器迁移出错

各位大神: 这几天刚安装了一台windows server 2016做域迁移时出现错误:1、默认SYSLOG、NETLOGON共享文件重启后自动取消共享,即使手动打开后依然会出现自动取消2、组策略中编辑策略时出现以下报错 policys.png (19.29 KB)2017-2-7 13:52操作此动作之前可以访问本机的共享(NETLOGON)3、使用DCDIAG检测多个报错:C:\Use...

weixin_31833039的博客 3314

MATLAB自动驾驶(1)——预构建场景库

MATLAB自动驾驶(1)——预构建场景库

Ucicorn Gundam的博客 3267

【typescript】TS编写和使用装饰器之(三):访问器装饰器

接着上一篇,咱们来介绍ts的访问器装饰器ts的安装和使用请看:TS编写和使用装饰器之(一):类装饰器。 访问器装饰器声明在一个访问器的声明之前(紧靠着访问器声明)。 访问器装饰器应用于访问器的 属性描述符并且可以用来监视,修改或替换一个访问器的定义。 访问器装饰器不能用在声明文件中(.d.ts),或者任何外部上下文(比如 declare的类)里。 注意  TypeScript不允许同时装饰一个成员的get和set访问器。取而代之的是,一个成员的所有装饰的必须应用在文档顺序的第一个访问器上。这是因为,在装饰器

qq_39576711的博客 1202

如何获取不同分区模板的基因表达矩阵,abagen: Allen 大脑图谱遗传数据工具箱的使用笔记

基因表达从根本上塑造了人类大脑的结构和功能结构。像Allen人脑图谱这样的开放获取转录组数据集提供了前所未有的能力来检查这些机制。abagen工具箱,这是一个用于处理转录组学数据的开放获取软件包,并使用它来检查方法可变性如何影响使用Allen人脑图谱的研究结果。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 3340

TypeScript 编程进阶:参数装饰器与访问器装饰器详解

在 TypeScript 的世界里,装饰器作为一种强大的元编程工具,为代码的扩展和定制提供了灵活的方式。装饰器通过在类、方法、属性或参数上添加额外的行为,使得开发者能够以声明式的方式增强或修改程序的功能。本文将聚焦于两种较为特殊且实用的装饰器类型:参数装饰器和访问器装饰器,探讨它们的用途、基本语法以及实际应用场景。

318

网络层隧道技术之ICMP隧道(pingTunnel/IcmpTunnel)

目录 ICMP隧道 使用ICMP搭建隧道(PingTunnel) 使用ICMP搭建隧道(Icmptunnel) ICMP隧道 ICMP隧道简单实用,是一个比较特殊的协议。在一般的通信协议里,如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要。最常见的ping命令就是利用的ICMP协议,攻击者可以利用命令行得到比回复更多的ICMP请求。在通常情况下,每个ping命令都有相...

谢公子的博客 6697

ABAP SQL Hierarchy 全景参考,组织树、分类树与递归查询在数据库层的优雅落地

ABAP SQL中的hierarchy语法为树形数据结构处理提供了高效方案。S/4HANA系统中常见的成本中心、利润中心、物料分类等树形结构,传统开发需通过递归和嵌套循环处理,而ABAP SQL hierarchies通过将层级遍历能力下沉到SQL层,借助SAP HANA的层级函数支持,实现了更高效的查询。 该功能要求ABAP 7.51+版本,支持两种实现方式:CDS hierarchy用于创建可复用的稳定层级模型,适合业务核心数据;ABAP SQL HIERARCHY generator则适用于临时性层级

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 313

2. 装饰器

2015备注:虽然中可以直接使用类装饰器,但为了确保其他装饰器可用,现阶段使用时,仍建议使用配置来开启装饰器支持,而且不排除在来的版本中,官方会装饰器的相关语法!

LBJ辉的前端天地 1232

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MiniCPM-V-4.7-1B-AWQ发布解读:1B参数手机多模态大模型,性能与效率双突破

**MiniCPM-V-4.7-1B-AWQ** 是 OpenBMB 开源 MiniCPM-V 4.7 系列中 **1B 参数手机多模态大模型** 的 AWQ(W4A16)量化版本。它以极小的体积在手机、平板等端侧设备上流畅运行,同时支持单图、多图和视频理解,在多模态性能与推理效率上实现了双重突破,是面向端侧 AI 场景的轻量级多模态大模型。 ## 一、这次发布带来了什么? MiniCPM-V

gitblog_01045的博客 665

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

TypeScript装饰器

20151⃣ 类装饰器2⃣ 属性装饰器3⃣ 方法装饰器4⃣ 访问器装饰器5⃣ 参数装饰器备注:虽然中可以直接使用类装饰器,但为了确保其他装饰器可用,现阶段使用时,仍建议使用配置来开启装饰器支持,而且不排除在来的版本中,官方会装饰器的相关语法!

2501_93882087的博客 199

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spek高级技巧:如何通过频谱分析发现音频质量问题

Spek是一款功能强大的开源音频频谱分析工具,能够帮助用户深入分析音频文件的频谱特性,快速发现音频质量问题。作为一款专业的声学频谱分析器,Spek支持多种音频格式,包括MP3、FLAC、WAV、OGG、M4A等,是音频工程师和音乐爱好者的必备工具。 ## 📊 Spek频谱分析的核心功能 Spek通过FFT(快速傅里叶变换)技术将音频信号转换为可视化的频谱图,让用户能够直观地看到音频的频率分布

gitblog_00392的博客 474

TypeScript08:装饰器、元数据

文章目录什么是装饰器语法装饰器种类类装饰器属性装饰器访问器装饰器方法装饰器参数装饰器实例装饰器执行顺序分析复合装饰器装饰器工厂元数据什么是元数据?使用 `reflect-metadata`定义元数据设置获取装饰器简化操作使用元数据的 log 装饰器使用 `emitDecoratorMetadata`根据标注,返回对应内容 什么是装饰器 decorators在TS中是一种可以不修改类代码的基础上通过添加标注的方式来对类型进行扩展的一种方式 减少代码量 提高代码扩展性、可读性和可维护性 只能在类中使用 语法

斜光的博客 1827

typescript-装饰器(十三)

方法装饰器写在一个方法的声明之前方法装饰器可以用来监视、修改或替换方法方法装饰器表达式会在运行时,当作函数被调用,传入下列三个参数静态成员的类的构造函数或实例成员的类的原型成员的名称该成员的属性描述符/***普通方法target对应的就是prototype*静态方法target对应的就是类的构造函数*desciptor.writable=false//不允许对方法进行修改*desciptor.value=function(){}//输出指定的内容name。...

菜鸡,轻喷 657

TypeScript

TypeScript通过类型推断、基础类型(如number、string、boolean)、字面量、any/unknown、void/never、object/Array/Tuple/Enum等实现类型安全。支持类型别名(type)与接口(interface)定义结构,前者可联合/交叉类型,后者支持声明合并。泛型(<T>)提升代码复用性,结合约束(extends)限制类型范围。抽象类(abstract class)定义模板与强制子类实现方法,装饰器(@)用于增强类功能。编译配置(tsconfig

2501_93485775的博客 213

鸿蒙HarmonyOS实战开发:TypeScript-装饰器【基础篇】

随着TypeScript和ES6里引入了类,在一些场景下我们需要额外的特性来支持标注或修改类及其成员。

2401_84194030的博客 1555

TS入门——07.装饰器

装饰器概念 ts官方文档上,是这样描述装饰器的,装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上,装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入。 通俗的讲装饰器就是一个方法,可以注入到类、方法、属性参数上来扩展类、属性、方法、参数的功能 装饰器主要有以下几种: 类装饰器 类装饰器是应用于类的装饰器 参数: target:类 function classDecorator(target: a

qq_38836435的博客 1032

TypeScript装饰器,一篇就够了

文章目录TypeScript装饰器 TypeScript装饰器

SuperBin的博客 1万+
上一篇: TypeScript:方法装饰器
下一篇: Golang:BasicAuth + JWT 校验用户权限
HTK217
博客等级 码龄9年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值