这与我活跃的另一个问题非常相似,但也可能会将其视为不同的问题,并且可能会被不同的受众视为有用。
我有针对淘汰赛验证的自定义规则:
ko.validation.rules["sameAs"] = {
validator: function (val, otherObservable) {
return val === otherObservable();
},
message: "Value should be same as {0}, but differs"
};
现在在原始的javascript中这很好用,因为用法看起来像:
function SomeObject() {
this.Email = ko.observable().extend({ required: true, email: true });
this.ConfirmationEmail = ko.observable().extend({ required: true, email: true, sameAs: this.Email });
}
然而现在在Typescript的土地上,如果我试着写这个:
class SomeObject {
public Email = ko.observable().extend({ required: true, email: true });
public ConfirmationEmail = ko.observable().extend({ required: true, email: true, sameAs: this.Email });
}
我现在收到错误:
关键字'this'不能在类体中的初始值设定项中引用, 或者在超级构造函数调用中
这是有道理的,但是我不知道我怎么能做我原本做的事情,除非我试图将它破解成构造函数或其他什么东西,这使得我的课程现在看起来有点可怕。
答案 0 :(得分:2)
我找不到写作的任何缺点:
class SomeObject {
public Email = ko.observable();
public ConfirmationEmail = ko.observable();
constructor() {
this.Email.extend({ required: true, email: true });
this.ConfirmationEmail.extend({ required: true, email: true, sameAs: this.Email })
}
}
除了2行代码之外。
在我看来,代码可读性要好一点,你不必阅读整条长行来看看它是什么类型的变量。 执行此分离可以更好地显示代码中发生的情况。也许它是一个美学的东西,但我发现混合变量声明与'extend'表达式有时难以阅读,特别是当'extend'非常错误...扩展:)。