Currently, a NotationSystem has to be explicitly typed at usage, which is already fine when it is statically known, but not when it should be known at runtime. A more convenient static method would suffice for the purpose.
So, instead of writing:
formatter: const EnglishNoteNameNotation();
A more flexible API could be:
formatter: NoteNameNotation.language('en');
Or even:
formatter: NotationSystems<NoteName>.language('en');
Requiring some static extensions on the type NotationSystems.