我刚刚开始在javascript中制作一些更严肃的项目,我觉得无类型正在成为一个问题。具体来说,我经常发现我的类是以错误的类型启动的,这个错误最好应该很容易修复,但有时会花费我很多时间。这就是为什么我想知道:在javascript中是否存在断言类属性的类型正确的做法?就像在这个例子中一样(a应该总是一个字符串,b应该始终是类Bar的一个实例,而c应该总是一个数字):
class Foo {
constructor(a,b,c){
if(typeof a !== "string"){
throw "Wrong type";
}
this.a = a;
if(!(b instanceof Bar)){
throw "Wrong type";
}
this.b = b;
if(typeof c !== "number"){
throw "Wrong type";
}
this.c = c;
}
setA(a){
if(typeof a !== "string"){
throw "Wrong type";
}
this.a = a;
}
setB(b){
if(!(b instanceof Bar)){
throw "Wrong type";
}
this.b = b;
}
setC(c){
if(typeof c !== "number"){
throw "Wrong type";
}
this.c = c;
}
}
这感觉就像是一种糟糕的方式,因为它非常麻烦和重复,并且只是抛出“错误的类型”也感觉很奇怪。有关于此的最佳做法吗?这个问题通常会被忽略吗?
我试图对此进行研究,但未能找到甚至提及此问题的内容。
此外,我知道这可能是一个非常主观的问题,可能不适合这个网站。在这种情况下,有没有人指出我应该问这个问题的地方?
答案 0 :(得分:1)
你可以稍微使用它并使用真正的getter / setter来美化整个事情:
const assert = (val, is) => {
if(typeof value !== is)
throw new Error(`WrongType: ${val} for ${is}`);
};
class Test {
constructor(a) {
this.a = a;
}
set a(v) { assert(v, "string"); this._a = v; }
get a(){ return this._a; }
}
但如果那仍然难看,只需使用打字稿或流程。