Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何在OOP类中保存状态?_Typescript_Oop - Fatal编程技术网

Typescript 如何在OOP类中保存状态?

Typescript 如何在OOP类中保存状态?,typescript,oop,Typescript,Oop,有一个入门类: class Component { public tools: Tools; constructor(private editorLayers: EditingLayers) { this.tools = this.editorLayers.getTools(); } setLayerItem(layer) { this.editorLayers.setLayerItem(layer); } } 类EditingLayers

有一个入门类:

class Component {
   public tools: Tools;
   constructor(private editorLayers: EditingLayers) {
     this.tools = this.editorLayers.getTools();
   }

   setLayerItem(layer) {
      this.editorLayers.setLayerItem(layer);
   }
}
EditingLayers
是:

class EditingLayers {
    private editLayerItem: EditLayerItem;
   
    getTools() {
        return this.editLayerItem.tools;
    }
 
    setLayerItem(layer) {
        this.editLayerItem = new EditLayerItem();
    } 
}
我想保存this.editLayerItem的状态,如果它是以前创建的,并且可以访问类组件中的所有
editLayerItem

问题是,如果没有初始化的
editLayerItem
对象,它将在以下行失败:

this.tools = this.editorLayers.getTools();

如果您的
tsconfig
包含
strict:true
strictNullChecks:true
,则您应该得到一个类型脚本错误:

“属性'editLayerItem'没有初始值设定项,并且未在构造函数中明确指定。”

我建议打开严格模式并相应地处理事情。这意味着,如果某个内容未处于有效状态,则需要抛出新错误(),或者扩展其返回类型以包含未定义的

您可能需要在构造函数中进行更多的设置:要么要求属性作为参数,要么设置初始值


我想保存this.editLayerItem的状态,如果它是以前创建的,并且可以访问类
组件中的所有
editLayerItem

听起来您想动态访问当前
EditingLayers
的工具,而不是传递给构造函数的工具(如果
this.editorLayers
是可以更改的)。因此,您应该使用方法
getTools()
或动态getter
getTools()
来代替实例属性
this.tools
。这两个参数都将在您访问它时进行计算,因此它保证了当前值

此代码以严格模式传递,但返回
Tools | undefined
。如果要确保始终拥有
工具
,则需要确保始终拥有
EditLayerItem

class Component {
    constructor(private editorLayers: EditingLayers) {
    }

    get tools() {
        return this.editorLayers.getTools();
    }

    setLayerItem() {
        this.editorLayers.setLayerItem();
    }
}

class EditingLayers {
    private editLayerItem?: EditLayerItem;

    getTools() {
        return this.editLayerItem?.tools;
    }

    setLayerItem() {
        this.editLayerItem = new EditLayerItem();
    }
}

如果您的
tsconfig
包含
strict:true
strictNullChecks:true
,则您应该得到一个类型脚本错误:

“属性'editLayerItem'没有初始值设定项,并且未在构造函数中明确指定。”

我建议打开严格模式并相应地处理事情。这意味着,如果某个内容未处于有效状态,则需要抛出新错误()
,或者扩展其返回类型以包含未定义的

您可能需要在构造函数中进行更多的设置:要么要求属性作为参数,要么设置初始值


我想保存this.editLayerItem的状态,如果它是以前创建的,并且可以访问类
组件中的所有
editLayerItem

听起来您想动态访问当前
EditingLayers
的工具,而不是传递给构造函数的工具(如果
this.editorLayers
是可以更改的)。因此,您应该使用方法
getTools()
或动态getter
getTools()
来代替实例属性
this.tools
。这两个参数都将在您访问它时进行计算,因此它保证了当前值

此代码以严格模式传递,但返回
Tools | undefined
。如果要确保始终拥有
工具
,则需要确保始终拥有
EditLayerItem

class Component {
    constructor(private editorLayers: EditingLayers) {
    }

    get tools() {
        return this.editorLayers.getTools();
    }

    setLayerItem() {
        this.editorLayers.setLayerItem();
    }
}

class EditingLayers {
    private editLayerItem?: EditLayerItem;

    getTools() {
        return this.editLayerItem?.tools;
    }

    setLayerItem() {
        this.editLayerItem = new EditLayerItem();
    }
}