我想知道是否有一种方法可以在NodeJ中的CLASS中处理以下情况。我有一个类,可以称其为contact,它具有一堆字符串字段,但也具有例如一组电子邮件类。我不能在JavaScript中指定值实际上应该是另一个类的数组,因为我无法在JavaScript中指定数据类型。另外,如何限制类中字段的值,例如我的电子邮件类具有一个名为type的字段,该字段可以是“ home | work | other”
答案 0 :(得分:2)
使用“香草” JavaScript,没有特定的方法告诉Array应该仅用另一个特定类的对象填充 。数组(以及其他任何数据结构)实际上将接受您所抛出的任何内容。这是完全有效的JS(尽管通常来说您不会经常这样做):
var array1 = [1, 'two', {three: true}, [4]];
如果您对类型安全性感兴趣,可以查看类似Typescript的信息,但这不是必需的,并且如果您只是在学习JS生态系统的工作原理,则可能会使事情变得更加复杂。
答案 1 :(得分:2)
尽管Javascript不会为您提供静态类型,但是由于您使用的是Node,并且可以控制使用的版本,因此您还有其他选择。您可以使用代理。如果您的电子邮件数组是代理,则可以控制设置器,并且仅允许添加要添加的内容。例如(不确定此代码片段是否将在所有浏览器中运行):
class Email {
constructor(addr) {
this.address = addr
}
}
// proxy array to check for values on set
let emails = new Proxy([], {
set: function(target, property, value, receiver) {
if (!(value instanceof Email)) {
if (property != "length")
console.log(`Array can only contain Email instances "${value}" is an incompatible type`)
return true
}
target[property] = value;
return true;
}
});
// fails
emails.push(1)
console.log("current array:", emails)
// works
let e = new Email("test@example.com")
emails.push(e)
console.log("current array:", emails)
// fails
emails[0] = "test"
console.log("current array:", emails)