-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Open
Labels
Awaiting More FeedbackThis means we'd like to hear from more people who would be helped by this featureThis means we'd like to hear from more people who would be helped by this featureSuggestionAn idea for TypeScriptAn idea for TypeScript
Description
Today I faced the following code
class A {
// silly warning comment: if you override this, don't forget to call the super method to avoid memory leaks
onExit() {
// do some important cleaning stuff
}
}
class B extends A {
onExit() {
super.onExit(); // good
}
}
class C extends A {
onExit() {
// forgot to call to super.onExit = memory leaks
}
}The problem is that, unlike a constructor, there is no way to force a method overriding another one to call the parent "super" function.
I wished we had a "concrete"* keyword to let the user know he must call the super method.
class A {
concrete onExit() {
// do some cleaning stuff
}
}
class B extends A {
onExit() {
super.onExit(); // no error
}
}
class C extends A {
// error: Declaration of derived method must contain a 'super' call
onExit() {
}
}In another language, I could have used the final keyword to prevent overriding the method but then… no overriding allowed neither.
- "concrete" In opposition to "abstract" (for lack of a better name), other ideas: "important" or "mandatory"
TheSegfault, magne4000, bohdyone, xaviergonz, egelev and 101 morecdpark0530, jonlepage, Megabyteceer, mckennapsean and rajsite
Metadata
Metadata
Assignees
Labels
Awaiting More FeedbackThis means we'd like to hear from more people who would be helped by this featureThis means we'd like to hear from more people who would be helped by this featureSuggestionAn idea for TypeScriptAn idea for TypeScript