Используя tcomb, я что-то упускаю или невозможно определить функцию экземпляра?

Я пытаюсь использовать 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, И если это так, я буду шокирован, что такая базовая возможность не включена...

1 ответ

Решение

От 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}`;
};
Другие вопросы по тегам