存储可以通过继承覆盖的元数据

时间:2019-01-09 18:11:40

标签: javascript

我正在使用JavaScript构建半强类型的lua序列化器。

这个想法是允许用户将字段/属性类型指示为元数据,并在序列化期间使用它,类似于c#中的属性。

例如

class foo {
    property1 //Mark this as type number
    method1(){};
}

class bar {
    propFoo//Mark this as type foo
}

是的,我知道属性定义是无效的语法,但我只想表达这个想法。

然后当我将method1反序列化为bar时,应在bar.propFoo上定义{ "propFoo" : { "property1" : 2} }

描述符看起来很自然,但是很糟糕,它不支持自定义描述。

然后我看了看装饰工,看起来很有希望。但是我似乎无法弄清楚如何处理继承和覆盖。

例如

class foo{
   property1 //Mark this as type number
}

class bar extends foo {
   property1 //Overwrite and mark this as do not serialize/deserialize
}

然后,当我尝试将{ "property1" : 1 }反序列化为foo时,它应该具有property = 1property1 = undefined反序列化为bar

原型似乎是另一种可能的解决方案,因为它处理继承链。但是,如果我将类型定义保留在一个对象内,则继承类的任何覆盖都将覆盖基类中的覆盖。 (原型继承不会创建属性的深层副本)

我不受ES版本的限制。因此,可以使用TypeScript进行编译的任何新功能都是可以接受的!

0 个答案:

没有答案