Hur man använder dekoratorer på enum i TypeScript
Så här
enum Response {
@Descriptor("this is No")
No = 0,
@Descriptor("this is Yes")
Yes = 1,
}
Hur man använder dekoratorer på enum i TypeScript, jag försökte denna kod, men det fungerade inte
export function Description(description:string){
return Reflect.metadata(descriptionMetadataKey, description);
}
Svar #1
Kort svar är att du inte kan (från och med denna skrivning). Det finns dock några alternativ.
Alternativ: Dok-kommentarer
Om du bara vill lägga till beskrivningar till dina enum-litteraler kan du använda dokumentskommentarer.
enum Response {
/**
* this is No
*/
No = 0,
/**
* this is Yes
*/
Yes = 1,
}
Även om beskrivningarna inte kommer att vara tillgängliga vid körning, kommer de att visas i redigerarens autokomplettering:
Alternativ: Enum-klass
Om du verkligen, verkligen behöver den dekorerade informationen om literalerna vid körning, kan du använda en klass istället. Eftersom dekoratorer kan appliceras på klassens egenskaper, kan du skriva en klass, dekorera dess egenskaper och sedan använda en instans av klassen som ditt "enum".
function Descriptor(description: string) {
return (target: any, propertyName: string) => {
// process metadata ...
};
}
class ResponsesEnum {
@Descriptor("this is Yes")
readonly Yes = 1;
@Descriptor("this is No")
readonly No = 2;
}
const Responses = new ResponsesEnum();
Prova det här.
Svar #2
Du kan inte. Där du kan använda dekoratörer i TypeScript:
Klassdekorerare
@sealed
class Greeter {}
Metoddekorerare
class Greeter {
@enumerable(false)
greet() {
return "Hello, " + this.greeting;
}
}
Accessor-dekoratorer
class Point {
private _x: number;
@configurable(false)
get x() { return this._x; }
}
Egendom Dekoratorer
class Greeter {
@format("Hello, %s")
greeting: string;
}
Parameterdekorerare
class Greeter {
greet(@required name: string) {
return "Hello " + name + ", " + this.greeting;
}
}
