前言

在 TypeScript – Decorator 装饰器 里,我有提到 TypeScript 只实现了 decorate 的特性,把 metadata 的特性独立了出来。

本来我以为还需要等待很长的时间他们才会实现,没想到 v5.2 既然推出了。哎哟,不错哦!

声明: Decorator 不是 TypeScript 语法,它是 ECMAScript (AKA JavaScript) 标准。Metadata 也是,目前是 stage 3

参考

Docs – Announcing TypeScript 5.2

什么是 Decorator Metadata?

Decorator Metadata 类似于 C# 的 Attribute。就是在 class 属性上写标签(简单说就是记入一些资料)。然后通过反射获取到这些资料并且使用它们。

通常我们用它来实现 Metaprogramming。

搭建环境

上一篇的 Disposable 做法类似。

必须使用 TypeScript Compiler (AKA tsc),esbuild 还不支持 Decorator。

tsconfig.json 加上 compilerOptions.lib "ESNext.Decorators"

{
"compilerOptions": {
"target": "ES2017",
"lib": [
"ES2017",
"ESNext.Decorators",
"DOM"
],
}
}

再加上 runtime polyfill

(Symbol as { metadata: symbol }).metadata ??= Symbol("Symbol.metadata");

使用方式

定义 decorator function

function setMetadata(_target: unknown, context: ClassMemberDecoratorContext) {
context.metadata[context.name] = true;
}

metadata 这个属性是新的。之前的 Decorator 没有。

apply to class member

class Person {
@setMetadata
firstName = 'Derrick';
}

反射

console.log(JSON.stringify(Person[Symbol.metadata])); // {"firstName":true}

简单明了。

实战场景

TODO future... 等以后有用上了,再补。

TypeScript – Decorator Metadata的更多相关文章

  1. [TypeScript] Reflection and Decorator Metadata

    TypeScript allows you to emit decorator metadata which enables more powerful features through reflec ...

  2. angular2 学习笔记 (Typescript - Attribute & reflection & decorator)

    更新 : 2018-11-27 { date: Date } 之前好像搞错了,这个是可以用 design:type 拿到的 { date: Date | null } 任何类型一但配上了 | 就 de ...

  3. TypeScript 1.5 Beta带来修饰元数据支持

    (此文章同时发表在本人微信公众号"dotNET每日精华文章") 今天由于有点小感冒,就不长篇大论了,简单介绍一下和VS 2015 RC一同发布的TypeScript 1.5 Bet ...

  4. angular2 学习笔记 (Typescript - Attribute & reflection)

    refer : https://www.npmjs.com/package/reflect-metadata refer : https://www.typescriptlang.org/docs/h ...

  5. ES-Next @Decorator All In One

    ES-Next @Decorator All In One @装饰器 import { logged } from "./logged.mjs"; class C { @logge ...

  6. [Angular 2] Understanding @Injectable

    In order to resolve a dependency, Angular’s DI uses type annotations. To make sure these types are p ...

  7. Angular2经典文章集锦

    Angular Metadata 等基础知识 http://www.jianshu.com/p/aeb11061b82c Metadata告诉Angular如何处理一个类,只有我们将它通告给Angul ...

  8. 聊聊IOC中依赖注入那些事 (Dependency inject)

    What is Dependency injection 依赖注入定义为组件之间依赖关系由容器在运行期决定,形象的说即由容器动态的将某个依赖关系注入到组件之中在面向对象编程中,我们经常处理的问题就是解 ...

  9. Markdown常用语法学习

    Markdown常用语法学习,这些就够用了. 演示地址: https://github.com/YalongYan/Markdown-- 特别提示:  标题'##'后面必须加一个空格,否则编译不对.# ...

  10. [Vue +TS] Use Two-Way Binding in Vue Using @Model Decorator with TypeScript

    Vue models, v-model, allow us to use two-way data binding, which is useful in some cases such as for ...

随机推荐

  1. [oeasy]python0105_七段数码管_7_SEGMENT_数码管驱动_4511

    七位数码管 回忆上次内容 上次回顾了 指示灯 辉光管   并了解了 驱动(driver) 驱动 就是 控制设备 工作的人(模块)     辉光管离我们的生活很远了 ​   添加图片注释,不超过 140 ...

  2. 在Python中doc转docx,xls转xlsx,ppt转pptx(Windows)

    在Python中doc转docx,xls转xlsx,ppt转pptx(Windows) 说明: 首次发表日期:2024-07-18 参考pypi包: doc2docx 缘起 我们一般使用Python开 ...

  3. 学习笔记--Java 控制语句

    Java 控制语句 Java 控制语句 选择结构 if 语句 switch 语句 循环结构 for循环 while循环 do...while循环 循环控制 break 语句 continue 语句 选 ...

  4. 学习笔记--Java中的数据类型

    Java中的数据类型 /** * Java中的数据类型: * 程序当中有很多的数据,每一个数据拥有与之相关的类型. * * * 1. 数据类型的作用: * 不同类型的数据占用的空间大小不同,数据类型的 ...

  5. 《最新出炉》系列入门篇-Python+Playwright自动化测试-53- 处理面包屑(详细教程)

    1.简介 面包屑(Breadcrumb),又称面包屑导航(BreadcrumbNavigation)这个概念来自童话故事"汉赛尔和格莱特",当汉赛尔和格莱特穿过森林时,不小心迷路了 ...

  6. 【Spring-Security】Re06 自定义Access & 注解权限分配

    一.基于ACCESS方法处理的实现: 我们之前使用的任何放行规则的方法,本质上还是调用access方法执行的 这也意味之我们可以直接使用access方法去方向,只需要注入不同的字符串即可 自定义Acc ...

  7. nginx+tomcat部署均衡+虚拟IP配置

    一.配置java环境 更新数据源 sudo apt update 安装java sudo apt install openjdk-java-8-jdk 查看是否安装成功 java -version 二 ...

  8. linux测试cpu性能的命令

    linux测试cpu性能的命令 在Linux中,可以使用多种命令来测试CPU性能.以下是一些常用的命令: stress: 一个通用的压力测试工具,可以生成CPU.内存.IO等负载. 安装: sudo ...

  9. 韩国网费比其他国家贵10倍?—— 因网费太高,直播平台 Twitch 宣布2024年2月退出韩国市场

    看新闻,说直播平台 Twitch因为韩国的网费太贵宣布退出韩国,这个新闻给我看纳闷了,从来么有听说过哪个视频或直播公司因为网费贵而关停,这个估计是这种原因关停的第一家吧,于是比较好奇. 相关: htt ...

  10. [COCI2015-2016#1] RELATIVNOST 题解

    前言 题目链接:洛谷. 这道题有很多做法,但是模拟赛寄了,故记之. Update on 2024.7.23 修复了一处时间复杂度的笔误. 题意简述 给你两个长为 \(n\) 的序列 \(A\) 和 \ ...