factory.ts 533 B

12345678910111213141516171819202122
  1. import Scale from './base';
  2. import { ScaleConfig } from './types';
  3. type ScaleConstructor<T extends Scale = Scale> = new (cfg: ScaleConfig) => T;
  4. interface ScaleMap {
  5. [key: string]: ScaleConstructor;
  6. }
  7. const map: ScaleMap = {};
  8. function getClass(key: string): ScaleConstructor {
  9. return map[key];
  10. }
  11. function registerClass(key: string, cls: ScaleConstructor) {
  12. if (getClass(key)) {
  13. throw new Error(`type '${key}' existed.`);
  14. }
  15. map[key] = cls;
  16. }
  17. export { Scale, getClass as getScale, registerClass as registerScale };