Z

Metadata Proposal

Metadata Proposal用于在类或类属性/方法上添加或读取元数据,简单来说,通过它可以获取方法的参数数据类型、返回值类型,向属性或方法本身添加额外的数据且不影响原本的代码。目前Metadata Proposal仍未被正式支持,但TypeScript已经作为实验性质支持了它。

TypeScript Reflect Metadata

要在TS中使用Metadata,需要在tsconfig.json中开启两个选项

1{
2    "compilerOptions": {
3        "experimentalDecorators": true,
4        "emitDecoratorMetadata": true
5    }
6}

同时需要安装

1npm install reflect-metadata

这样就能在项目中使用Metadata了。

首先来看看如何向类添加并读取Metadata。

1import "reflect-metadata";
2
3@Reflect.metadata("sex", "male")
4class People {
5}
6
7console.log(Reflect.getMetadata("sex", People)); // male

可以看到我们为People添加了元数据sex,其值为male,之后就可以通过Reflect.getMetadataAPI获取到添加在People类上的sex元数据值。

与之功能类似的API还有:

  • Reflect.hasMetadata
  • Reflect.hasOwnMetadata
  • Reflect.getOwnMetadata
  • Reflect.getMetadataKeys
  • Reflect.deleteMetadata

具体如何使用可以查看Metadata Proposal,总的来说就是对metadata进行增删改查。