javascript - ReferenceError: Kan inte komma åt <Class> innan initialisering


Jag har en enkel autoload-metod som initierar och returnerar en instans av en klass med hjälp av require()

Ovanför enkla kravet finns viss logik som begär information från databasen och kontrollerar om klassen finns i filsystemet.

let elementClass = require('./elements/' + element.name).default;

Node och ts-node kompilerar utan problem, men när jag skapar en instans med require får jag ReferenceError: Cannot access 'Object' before initialization

Object är huvudabstrakt klass som utökas av Element, som sedan utökas av elementtypen.

Obligatorisk är sista i kedjan klass elementType

Klassen initieras utan problem om det inte finns någon Object-klass som utökas, men Object-klassen testades utan några ändringar och med tom konstruktor. Och all logik överfördes till Element-klassen

Objekt.ts

export default class Object
{
    public id: number;
    public name: string;
    public type: string;
    public parent: number;
    public owner: number;
    public permission: string;
    public data: {[name: string]: any};
    protected dataSchema: {[name: string]: any} = {};

    constructor(id: number, name: string, type: string, parent: number, owner: number, permission: string, data: {[name: string]: any})
    {
        if(new Validator().validate(data, this.dataSchema))
            throw new Error('Invalid input data');

        this.id = id;
        this.name = name;
        this.type = type;
        this.parent = parent;
        this.owner = owner;
        this.permission = permission;
        this.data = data;
    }
}

Element.ts

import Object from "./object";

export default class Element extends Object
{
/**
 * simple logic no constructor
 */
}

ElementType.ts

import Element from '../element';

export default class ElementType extends Element
{
/**
 * Simple logic without constructor
 */
}

Även utan några enkla metoder inuti klasser fungerar det inte, det fungerar endast när huvudföräldraklassen inte används (Object)

Finns det något problem som kräver en klass som är dubbelutökad?

Svar #1

Object är ett reserverat ord, jag var tvungen att byta namn på klassen till något annat.