Using Enum as a decorator argument

Could an enum type be passed as a parameter to a decorator function?

export class A {
    @AsEnum(SomeEnum)
    name: string;
}

export enum SomeEnum { A, B, C}

export function AsEnum(type): any {
    return (target, propert) => {
      return {
            get: function(): Object {
                return type; // the value of type remains undefined
            },
        }
    };
}

The value of 'type' is consistently undefined in this scenario.

Answer №1

It seems that the issue lies in the order of your code.
If you adjust it to:

console.log("the enum: ", MyEnum);
export enum MyEnum { X, Y, Z}

You will receive:

the enum: undefined

To resolve this, ensure that you declare MyEnum before referencing it within the decorator like so:

function EnumDecorator(type): any {
    return (target, propert) => {
      return {
            get: function(): Object {
                return type; // type is undefined
            },
        }
    };
}

enum MyEnum { X, Y, Z}

class MyClass {
    @EnumDecorator(MyEnum)
    name: string;
}

This problem occurs because the enum is not yet evaluated by the interpreter when attempting to use it with the decorator.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Error TS2307 - Module 'lodash' not found during build process

Latest Update I must apologize for the confusion in my previous explanation of the issue. The errors I encountered were not during the compilation of the Angular application via Gulp, but rather in the Visual Studio 'Errors List'. Fortunately, I ...

Finding the width of a div element in Angular 2

I have encountered several posts, but none of them quite achieve what I am trying to do. I am dealing with a table that exceeds the width of the page and, due to certain requirements, I need to measure its width. I attempted: @ViewChild('tableToMea ...

Exploring the Power of Chained Promise Calls

Afterwards, in the .then section, I call another promise for an HTTP request: .then(result => { this.service().then(data => {}); }); Would you say that using chained promises in this manner is correct? ...

How can we prevent code (components outing) from being included in non-production environments while using angular (TypeScript Webpack)?

I need to implement a login component and routing path in my application, even though there is no traditional login page as the authentication will be handled through a Single Sign-On (SSO) system. The purpose of adding this login functionality is to allow ...

I would like to create an array within an object in Angular 2 in order to add new values to it

Every time I try to define an array inside the object using dot notation, it keeps showing as undefined This is my HTML code: <mat-checkbox *ngFor="let q1 of question.checkboxes;" (change)="checkboxSelected(q1,question,$event)"> {{q1.name}} </m ...

Evaluating the presence of certain elements within a given set

I have been attempting to validate a list to check for specific fields, but instead of returning only the specified fields, it is returning all existing fields. How can I make this work correctly? Are there any alternative methods that may be more effect ...

Utilizing TypeScript 3.1: Easier Array Indexing with Enums in Strict Mode

Enabling TypeScript "strict" mode with "noImplicitAny" causes this code to fail compilation. I am looking for guidance on how to properly declare and use Arrays indexed by Enum values. namespace CommandLineParser { enum States { sNoWhere, sSwitchValu ...

Clear pagination - results generated by the clr-dg-page-size component

I'm currently developing an Angular 8 application using Clarity UI. Within my app, I have implemented a datagrid with pagination. My challenge lies in fetching data after changing the number of items per page, as there is no output provided by the Cl ...

What is the process for passing input values to a dynamic Angular component?

https://i.sstatic.net/hghse.png My goal is to develop a dynamic filtering system where users can specify multiple attributes and their corresponding values to filter a list of components. The dynamically added component includes two dropdown menus: one fo ...

Using various types in TypeScript to represent a variety of events

If I have these three distinct objects: { id: 1, time: 1000, type: 'A', data: { a: 'one' } } { id: 2, time: 1001, type: 'B', data: { b: 123 } } { id: 3, time: 1002, type: 'C', data: { c: 'thre ...

Why is Typescript converting my keyof type to a never type and what steps can I take to resolve this issue?

Apologies if this question is repetitive, as I am new to TypeScript and struggling to identify related issues due to the complexity of some questions. The issue I'm facing involves TS coercing a type to never, which is confusing me. Here's the sc ...

Error TS2532 in TypeScript indicates that there is a possibility that the object is undefined

Yesterday, WebStorm 2020.1 was installed on my computer. All of a sudden, I started encountering numerous TS2532 errors. https://i.sstatic.net/QXg4M.png How is it even possible for this to be "undefined"? Doesn't selectedOwner && prevent th ...

Utilizing Angular to import an SVG file from a backend and incorporate its content as a template

I am looking for a solution to load an SVG date from my Spring Boot backend and utilize it as an Angular template. Currently, the request is structured like this: getSVG (): Observable <any> { return this.http.get(`${environment.apiUrl}/path ...

Unveiling the secret to implementing conditional rendering within a flatlist

I gathered data from an API that provides information on country names and populations. The country names are displayed in a searchable flatlist. My objective is to show a small circle next to each country name in the flatlist based on its population size. ...

Switch up colors in Angular Material table rows

Is there a way to dynamically change row colors based on the date order in a table? In my mat table, I have a date field and I'm looking to highlight rows with the closest date in red and gradually transition to green for the furthest dates. ...

The specified property 'slug' is not found within the designated type 'ParsedUrlQuery | undefined'

I am faced with an issue in my code where I am attempting to retrieve the path of my page within the getServerSideProps function. However, I have encountered a problem as the type of params is currently an object. How can I convert this object into a stri ...

What is the best way to create a jumping animation for an object in Cannon.js and Three.js?

During my quest for a solution, I came across a common practice where users used cannonBody.velocity.y = JUMP_VELOCITY to make an object jump. However, in my scenario, this method only worked while the object was already in motion and not when it was stat ...

Exploring techniques to compare two objects in JavaScript and then dynamically generate a new object with distinct values

var person1={ name:"Sarah", age:"35", jobTitle:"Manager" } var person2={ name:"Sarah Sanders", age:"35", jobTitle:"Manager" } //the name value has been updated in the above object, s ...

What is the best way to add all IDs to an array, except for the very first one

Is there a way to push all response IDs into the idList array, excluding the first ID? Currently, the code below pushes all IDs to the list. How can it be modified to exclude the first ID? const getAllId = async () => { let res = await axios({ m ...

Building Custom Secure Paths with Keycloak in Next.js - A Step-by-Step Guide

Incorporating Keycloak for authentication in my Next.js application is something I'm currently working on. My goal is to secure certain routes, such as /contact, and allow access only to authenticated users. Although I have successfully set up Keycloa ...