首页 > 解决方案 > 参考错误:无法访问初始化前

问题描述

我有简单的自动加载器方法,它使用初始化并返回类的实例require()

以上简单的要求是一些从数据库请求信息并检查文件系统中是否存在类的逻辑。

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

Node 和 ts-node 编译没有问题,但是当我通过 require 创建实例时 ReferenceError: Cannot access 'Object' before initialization

Object是被扩展的主要抽象类,Element然后由元素类型扩展。

必需是链类中的最后一个elementType

如果没有Object类被扩展,类被初始化没有问题,但是Object类在没有任何修改和空白构造函数的情况下被测试。并将所有逻辑转移到Element课堂

对象.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;
    }
}

元素.ts

import Object from "./object";

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

元素类型.ts

import Element from '../element';

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

即使在类中没有任何简单的方法它也不起作用,它只在不使用 Main Parent 类时才起作用(Object

是否有一些问题需要两次扩展的课程?

标签: javascriptnode.jstypescript

解决方案


对象是保留字,我只需要将类重命名为其他名称。


推荐阅读