Make it possible to create subclass of Node
while keeping TS happy
#2772
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The Problem
Currently,
MathNode
is defined as a union of all of the existing subclasses ofNode
i.e.This has a few consequences:
MathNode
unionNode
when using mathjs while having that node conform to theMathNode
type so that TS is happyThe solution
By simply aliasing
MathNode
toMathNodeCommon
(which all existing node types extend), typescript automatically infers that any subclasses ofNode
are validMathNode
types.I did some digging and couldn't quite figure out why the
MathNodeCommon
type needed to exist in the first place and why it couldn't just be calledMathNode
, but it is what it is and I guess we can't change that now without a lot of breaking changes.