Is there a typescript-eslint rule to forbid using the "name" property on a function?
08:29 01 Sep 2026

I recently migrated some Angular components to Signal-based inputs, very approximately something like

class MyComponent {
  // previously `@Input() user: User!;`
  protected user = input.required();
}

Now every reference to the dynamic value is a function call so where I previously wrote this.fooLabel = this.user.email; it would be this.fooLabel = this.user().email, or in templates I would write {{user().status}} etc. Generally easy to implement because the type-checker will highlight any references I missed -- user.email doesn't exist on the type Signal.

The problem is that in a lot of cases the model used for passing values includes a name property, and because Signal is just a Function, it does have a name. So this.user.name does not get flagged by the type-checker, and I would only notice the oversight at runtime when the name is "Signal" (or whatever it minifies to).

I've found some guidance for using the vanilla eslint rule no-restricted-syntax to avoid references to x.constructor.name, but I think in this case I need a rule that uses type information to forbid references to the name property inherited from the Function prototype. I don't think our codebase otherwise uses the name of any Function-typed values intentionally. Is there such a rule built in to typescript-eslint? If not, maybe someone has made a plugin?

angular eslint typescript-eslint