Support to method decorator that change the method signature · Issue #49229 · microsoft/TypeScript (original) (raw)

Suggestion

As the title said, I just started using typescript and I want to have a method decorator that is able to change the method signature and have tsc knew about the new signature.

🔍 Search Terms

I have seen a lot of works around class decorators, like #4881 but nothing specifically on supporting the behavior I have described.

✅ Viability Checklist

My suggestion meets these guidelines:

⭐ Suggestion

If not for other things, I would like to understand if there is some way to set the types of decoratorto signal the new decorated function signature.

📃 Motivating Example

As a minimal example, look at

function decorator(_target: any, _propertyKey: string, descriptor: PropertyDescriptor): void { const method = descriptor.value; descriptor.value = function wrapper(a: number, b: number, c: number): void { // here you have access to a, b, c console.log(a, b, c); return method.call(this, a, b, c); } }

class C { @decorator method(a: number, b: number): void { // here you have access to a, b console.log(a, b); } }

new C().method(1, 2, 3); // here you pass a, b and c

tsc sasys that there is an error in the last line, because it doesn't "know" that C.method have a new signature, after applying the decorator.

💻 Use Cases

I'm implementing a simple method wrapper that add a parameter to do pre-checks on method invocation itself