【发布时间】:2018-04-02 18:45:24
【问题描述】:
我在 Typescript 类中设置 Getter 时遇到问题,可以使用一些帮助来理解我所缺少的内容。我有这样的课:
export class Parameter {
constructor(
public dataType: string = '',
public title: string = '',
public index: string = '',
public values: Value[] = [],
public isValid: boolean = false;
) {}
}
使用这个效果很好。
isValid 属性当前正在外部设置,但它基于存储在“values”数组中的值。我认为在外部设置这个值是愚蠢和低效的,相反我应该将 isValid 设置为只读属性。有道理?出于这个问题的目的,我将设置一些简单的逻辑。所以这里是重写的类。
export class Parameter {
constructor(
public dataType: string = '',
public title: string = '',
public index: string = '',
public values: Value[] = []
) {}
get isValid(): boolean {
return false;
}
}
当我运行代码并尝试从实例化的 Parameter 类访问 isValid 时(在前面的示例中运行良好)。现在,当我检查该类时,isValid 属性是“未定义的”。我在 Getter 中设置了一个断点,断点永远不会被击中。我一定是在定义这个错误,或者误解了我在这里要做的事情。
谁能帮我理解?谢谢!
编辑:我将 isValid() 代码更改为仅返回 false,因为我的示例代码使人们感到困惑。即使它只是返回 false,它仍然返回为“未定义”。
【问题讨论】:
-
你在哪一行设置断点?并非
isValid()的所有代码路径都返回一个值。所以isValid是undefined是dataType !== 'dateTime'的预期行为 -
get isValid(): boolean { return this.dateType === 'dateTime' && this.values[0].value !== ''; } -
请看我上面的编辑。我将代码更改为仅从 isValid() 返回 false,但它仍然返回未定义。
-
您的代码按预期工作。 StackBlitz
-
examine the class是什么意思?它不只是在调试器中,是吗?您尝试将 instance.isValid 分配给变量并打印该变量?m,对吗?
标签: angular typescript