Microsoft/TypeScript

Access base class protected methods in static block

Open

#62738 opened on Nov 9, 2025

View on GitHub
 (6 comments) (0 reactions) (0 assignees)TypeScript (48,455 stars) (6,726 forks)batch import
BugDomain: classesHelp Wanted

Description

🔍 Search Terms

  • Dynamic method override
  • Static block super
  • Static block prototype

✅ Viability Checklist

⭐ Suggestion

Hey there, I have a use case where I want to declare/override a protected method using it's prototype.

With the addition of static blocks I can now override the method itself, however I can't call the same method of the base class using super. This makes it impossible to create dynamic overrides of a prototype method atm.

My suggestion would be to allow the usage of the base type prototypes in a static block of the class as well. This would make it a lot easier to dynamically override/declare a method without using instance fields.

📃 Motivating Example

TypeScript now supports dynamic method overrides using static initialization blocks instead of runtime checks.

💻 Use Cases

1. What do you want to use this for? Dynamic method declarations / overrides Dynamic class creation using an options object.

2. What shortcomings exist with current approaches? Currently the only way I see to do this is either:

  • Use as any/ which destroys type information
  • Use as DerivedType which allows the call with type information
  • Always override the method and call the additional method in an if branch which usually requires an instance field
  • Declare the method on an instance field instead of the prototype which uses more memory
  • Use @ts-ignore because you know what you are doing

3. What workarounds are you using in the meantime?

  • I use (Base.prototype as DerivedType).myMethod which imho is the best solution atm

Example: https://www.typescriptlang.org/play/?ssl=25&ssc=2&pln=1&pc=1#code/MYGwhgzhAECyCeBhcVoG8BQ1oAcBOA9gC4CmwpAJtALbywlEAWBFAFAJTpbbQD0v0AHTCIBaiWggCAcwCWwbgF8MyjKEgwEAERJ5ZANxIVkG6CQAepAHYVNSFBEzZ8xMpWgFDePRQm16TCwcXDx8AsKC0KLi0GAUFLJEsgRWYCCSMvLc2BAArji6gv4MzGzsShjcEERgScAhPEyyEIIuRMTwBUV0JSzQALzQAGa5VuTJVqxNEABccPA6eobGDpxOoWFCwlFiEnEJSSlpGXIK2Tx5BXjdAaXB-FH5utCjvup4RtBEEABMAGx-AAMlQ28xMUFahHaRE6JBuvQogmAaRAU0YzXYAG5NlZiLEQFIAO6fb4-AAsZL+II2rAQ4JabQ6BViMDAVng7HhgURyIJaIxmwAKuiYISCHgANYwABGuSI0GaLysEDAQxI52wtPsGkhxCZezsiwMRnpnOK3KRKP5EE4D2FirFkplcoVMFGKrV52U2GUiiAA

Contributor guide