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()
或动态gettergetTools()
来代替实例属性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()
或动态gettergetTools()
来代替实例属性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();
}
}