【问题标题】:ReferenceError: Cannot access <Class> before initializationReferenceError:在初始化之前无法访问 <Class>
【发布时间】:2021-07-26 08:22:12
【问题描述】:

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

简单的 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)

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

【问题讨论】:

  • Object不是保留字吗?
  • 现在,我觉得自己真的很愚蠢,我已经查找了所有内容,但这对我来说并没有什么启发。谢谢你。抱歉打扰了。

标签: javascript node.js typescript


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-29
    • 2021-09-10
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2021-09-30
    相关资源
    最近更新 更多