我正在尝试使用tcomb并由于当前原因而失败,因为我无法绕开如何定义实例函数的头脑。

说我有一个类型:

t.struct({
  year: t.Integer,
  monthIndex: t.Integer,
  dayIndex: t.maybe(t.Integer),
  indexInMonth: t.maybe(t.Integer),
  title: t.Str,
  subtitle: t.maybe(t.Str),
  description: t.maybe(t.Str),
  iconIdentifier: t.maybe(t.Str),
})


到目前为止,一切都很好。

问题

现在让我们说我想添加一个month实例方法,该方法可以读取this并获取正确的月份名称:

month() {
  return MonthsInYear[this.monthIndex]
},


如果我尝试将其添加到上面的内部,则看不到它。

const b1 = CalEvent({
  year: 2015,
  monthIndex:2,
  title: 'abc',
  description: 'abc'
})

console.log(b1.month)


如果我尝试执行mixin或除每次定义函数外的其他操作,都会发生相同的情况。

我最初在其中具有of语法以及下面的功能compare ...

t.struct({
  year: t.Integer,
  monthIndex: t.Integer,
  compare: t.func([CalEvent], CalEventComparisonResult).of(
    (toCompare) => CalEvent(compare(this,toCompare))
  ),
  dayIndex: t.maybe(t.Integer),
  indexInMonth: t.maybe(t.Integer),
  title: t.Str,
  subtitle: t.maybe(t.Str),
  description: t.maybe(t.Str),
  iconIdentifier: t.maybe(t.Str),
})


仍然没有骰子。

我开始认为我想做的事不能在tcomb中完成。如果是这样的话,我会震惊的是没有包括这样的基本功能...

最佳答案

README

const Person = t.struct({
  name: t.String,              // required string
  surname: t.maybe(t.String),  // optional string
  age: Integer,                // required integer
  tags: t.list(t.String)       // a list of strings
}, 'Person');

// methods are defined as usual
Person.prototype.getFullName = function () {
  return `${this.name} ${this.surname}`;
};

关于javascript - 使用tcomb,我是否缺少某些内容或无法定义实例函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38532034/

10-09 21:48