27 | Syntax
28 | This section is non-normative.
29 |
30 | // define metadata on an object or property
31 | Reflect.defineMetadata(metadataKey, metadataValue, target);
32 | Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey);
33 |
34 | // check for presence of a metadata key on the prototype chain of an object or property
35 | let result = Reflect.hasMetadata(metadataKey, target);
36 | let result = Reflect.hasMetadata(metadataKey, target, propertyKey);
37 |
38 | // check for presence of an own metadata key of an object or property
39 | let result = Reflect.hasOwnMetadata(metadataKey, target);
40 | let result = Reflect.hasOwnMetadata(metadataKey, target, propertyKey);
41 |
42 | // get metadata value of a metadata key on the prototype chain of an object or property
43 | let result = Reflect.getMetadata(metadataKey, target);
44 | let result = Reflect.getMetadata(metadataKey, target, propertyKey);
45 |
46 | // get metadata value of an own metadata key of an object or property
47 | let result = Reflect.getOwnMetadata(metadataKey, target);
48 | let result = Reflect.getOwnMetadata(metadataKey, target, propertyKey);
49 |
50 | // get all metadata keys on the prototype chain of an object or property
51 | let result = Reflect.getMetadataKeys(target);
52 | let result = Reflect.getMetadataKeys(target, propertyKey);
53 |
54 | // get all own metadata keys of an object or property
55 | let result = Reflect.getOwnMetadataKeys(target);
56 | let result = Reflect.getOwnMetadataKeys(target, propertyKey);
57 |
58 | // delete metadata from an object or property
59 | let result = Reflect.deleteMetadata(metadataKey, target);
60 | let result = Reflect.deleteMetadata(metadataKey, target, propertyKey);
61 |
62 | // apply metadata via a decorator to a constructor
63 | @Reflect.metadata(metadataKey, metadataValue)
64 | class C {
65 | // apply metadata via a decorator to a method (property)
66 | @Reflect.metadata(metadataKey, metadataValue)
67 | method() {
68 | }
69 | }
70 |
71 | // Design-time type annotations
72 | function Type(type) { return Reflect.metadata("design:type", type); }
73 | function ParamTypes(...types) { return Reflect.metadata("design:paramtypes", types); }
74 | function ReturnType(type) { return Reflect.metadata("design:returntype", type); }
75 |
76 | // Decorator application
77 | @ParamTypes(String, Number)
78 | class C {
79 | constructor(text, i) {
80 | }
81 |
82 | @Type(String)
83 | get name() { return "text"; }
84 |
85 | @Type(Function)
86 | @ParamTypes(Number, Number)
87 | @ReturnType(Number)
88 | add(x, y) {
89 | return x + y;
90 | }
91 | }
92 |
93 | // Metadata introspection
94 | let obj = new C("a", 1);
95 | let paramTypes = Reflect.getMetadata("design:paramtypes", obj, "add"); // [Number, Number]
96 |
97 |
98 |
99 |