Utilize decorators to access function parameters

Recently, I delved into the realm of creating decorators and learning how to implement them effectively. One question that came up was whether it's possible to access the arguments of a method within the decorator function.

For instance, I'm interested in developing a decorator that records both the method name and its arguments. However, my current implementation only allows me to retrieve the method name.

  export function logger(target, propertyKey) {
    console.log(propertyKey); //Method name
  }

  @logger
  private fetchData(param) {
   ////
  }

Is there a way for me to access the "param" argument of the 'fetchData' method from within the decorator?

Thank you in advance.

UPDATE:

Issue resolved. Check out this link to a working example.

Answer №1

target represents the class prototype in this scenario. To ensure that method parameters can be accessed during a function call, it is necessary to substitute the method with a wrapper:

  export function logData(target, propertyKey, descriptor) {
    const originalFunction = target[propertyKey];
    descriptor.value = function(parameter) {
      console.log(parameter);
      return originalFunction.call(this, parameter);
    };
  }

  ...
  @logData
  private fetchData(parameter) {}
  ...

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

The cucumber step definition will wait until a specific value in mongo has been marked as "COMPLETED"

When initiating a conversion using a starting conversion service, there is a field in my Mongo database that tracks the status of the conversion: ready, runningA, runningB, DONE. How can I create a step definition that will pause execution until the statu ...

What is the method for inserting two dashes within a number?

For the output, I am looking to showcase a number in the following format => 979-9638403-03. At present, the number appears like this => 979963840303. portfolio.ts export class Portfolio { ... DEPO: number; /* DEPO */ const ...

Exploring the differences between MongoDB's ISODate and a string data

Currently deep in a backend build using MERN stack and Typescript. The issue arises when attempting to compare Dates stored in MongoDB as Date(ISODate(for example: "2022-09-14T16:00:00.000+00:00") with a string (for example: "2022-14-09&quo ...

What is the best way to eliminate hover diagnostic content in my VS Code extension?

I've implemented a VS Code extension where I've added a command to delete a diagnostic: extension.ts context.subscriptions.push( vscode.commands.registerCommand( DELETE_DIAGNOSTIC_COMMAND, () => removeDiagnostic() ) ) ...

Is there a way to access URL parameters in the back-end using Node.js?

How can I extract querystring parameters email, job, and source from the following URL? I want to use these parameters in my service class: @Injectable() export class TesteService{ constructor(){} async fetchDataFromUrl(urlSite: URL){ ...

How to build a login page with a static header and footer using Angular2

For my latest project, I am currently in the process of developing an application using Angular2 and eclipse Neon. Utilizing angular-cli for this app, I am now focused on creating the login page. Within the app.component.html file, you will find the follow ...

Can you provide some guidance on utilizing a for loop within Angular?

Storing the values entered by the user in an input field as "values" and having another array, "existing userdetails," returned from the backend that contains all details of existing users, I am faced with the task of comparing these two sets of data. I h ...

Having Trouble Setting Default Value in React Typescript MUI Autocomplete

I am encountering an issue with my React and Typescript code using MUI with the use of hook form. The problem arises when trying to set a default value for an Autocomplete field, resulting in the following error message: I am seeking assistance in resolvi ...

Electron triggers MouseLeave event on child elements

Dealing with mouse hover events can be a bit tricky, especially when working with AngularJS in an Electron-hosted app. Here's the HTML template and script I'm using: HTML: <div id="controlArea" (mouseenter) = "onControlAreaEnter()" ...

What is the process of defining a mongoose method within a schema class when working with nestjs/mongoose?

Is there a way to write a method in a schema class using the nestjs/mongoose package? I'm trying to implement a method as shown below. import { SchemaFactory, Schema, Prop } from '@nestjs/mongoose'; import { Document } from 'mongoose&a ...

Leverage a JavaScript library with TypeScript in Angular 2

SignalR integration in my Ionic/Angular 2 application has been a challenge. I'm creating a basic Hub setup as follows: const accessToken = authManager.getRawAccessToken(); let hubUrl = environment.baseUrl + 'messages'; if (accessToken) { ...

Create a fake version of ElementRef and simulate the getBoundingClientRect() function

Looking to simulate ElementRef and access getBoundingClientRect() I experimented with the code below, but it didn't yield the expected results. const mockHostRef = { nativeElement: { getBoundingClientRect: {top: 10, left: 10} } } {pr ...

Ensure that enums in Typescript are initialized explicitly

Is there a way to explicitly initialize the following enum in typescript? enum BloodGroup { OPositive = "O +ve", ONegative = "O -ve", APositive = "A +ve", ANegative = "A -ve", } I attempted something like this (I know it won't wo ...

Typescript Event Handling in React Select

I am facing an issue with my handleSelect function: const handlerSelectBank = (event: React.ChangeEvent<{ value: unknown }>) => { setState({ ...state, buttonDisabled: false, selectedBank: event }); }; Upon execution, I encountered ...

Tips for incorporating the ternary operator in JSX of a React component while utilizing TypeScript?

I am looking to implement a conditional rendering logic in React and TypeScript, where I need to return null if a specific condition is met, otherwise render a component using a ternary operator. Here is the code snippet I currently have: {condition1 && ...

Using the recommended Prettier plugin for TypeScript in ESLint is causing issues with the ability to use the override keyword

Software Versions: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6a0f190603041e2a5d445958445a">[email protected]</a> <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7000021504041915023 ...

An array variable marked as mat-checked contains the total sum

Currently, I am utilizing mat-checked to calculate a total sum from an Array. The issue arises when the number of items in my array varies, triggering an error: ERROR TypeError: Cannot read property 'isChecked' of undefined Is there a way to ...

Expo + tRPC: Oops! Looks like the application context couldn't be retrieved. Don't forget to wrap your App inside the `withTRPC` HoC for

I'm currently working on a straightforward tRPC server setup: // server.ts import { initTRPC } from "@trpc/server"; import { z } from "zod"; const t = initTRPC.create(); export const appRouter = t.router({ greeting: t.procedu ...

The TypeScript compiler is encountering issues with the transfer_state.d.ts file located in the node_modules@angularplatform-browsersrcrowser directory

I am encountering around 7 errors with my TS compiler related to the transfer_state.d.ts file located in node_modules\@angular\platform-browser\src\browser\ directory The line causing the issue is: export declare function makeSta ...

Using the length of an array as an iterator within a nested ngFor loop in Angular 9

I am looping through an array of objects where each object contains another array of objects with attributes like "name" and "id". The length of this array of objects (noticias) varies. I am struggling to display these values and have only managed to acce ...