在javascript中键入不可变对象

时间:2015-02-28 00:58:33

标签: javascript reactjs immutability reactjs-flux immutable.js

我正在尝试在类似React Flux的应用程序中组织数据类型。我的所有数据对象都是不可变的,对于我正在使用immutable.js的集合,这是完美的库。但对于键入的对象,我使用自己的类。我不认为这是最好的解决方案,但我需要以某种方式处理默认值,内部一致性,数据验证,向该对象添加方法等。

  • 是否有可用于此目的的图书馆?
  • 你是否也为那种对象使用immutable.js集合?那么你在其他地方处理数据,验证和其他功能的一致性?
  • 或者您是否使用普通课程?
  • 您认为在基于React / Flux的应用程序中输入类型对象是个好主意吗?

这是我的意思是什么样的对象的例子,以及我如何使用它的简单示例。

class Event extends MyImmutableLib {
     constructor(plain) {
          this.start = plain.start;
          this.end = plain.end;
          this.name = plain.name || "unnamed event"; // some default value
          this.attendants = plain.attendants || [];
          this.valid = plain.start < plain.end; // simple check of validity, I can also throw exception if it is needed
          Object.freeze(this); // I use freeze to be sure I don't accidentally change the object
     }
     getDuration() {
          return this.end - plain.start; // methods are sometimes useful
     }
     addAttendant(newPerson) { 
          return this.set("attendants", this.attendants.concat([newPerson])) //immutable edit, so I return new object
     }
}

var someEvent = new Event({start: new Date("2015-02-29"), end: new Date("2012-02-30")}) //
var jsMeetup =  someEvent.set("name", "9th Js Meetup, Brno")
var jsMeetup = jsMeetup.addAttendant("Joe");

console.log(jsMeetup.name, jsMeetup.getDuration())

最好的是一些图书馆:

  • 键入的对象 - 所以我会更好地组织数据。
  • 默认值
  • 验证
  • 方法
  • 不变性特定功能

0 个答案:

没有答案