Поток: Typechecking сложный Неизменяемая форма с использованием JS()?

Как вы определяете форму структуры данных Immutable.JS, сгенерированной из fromJS с помощью потока? Обычные старые JS-капли могут быть напечатаны очень точно с использованием объектной литературной нотации:

type ObjectShape = {
  a: number,
  b: string,
  c: {
    d: number,
  },
  e: Array<number>
};

const obj: ObjectShape = { // hyper-accurate
  a: 1,
  b: '2',
  c: {
    d: 3,
  },
  e: [4]
}

Однако на стороне Immutable.js, по-видимому, есть два основных осложнения:

Я действительно смущен тем, как заставить Flow понять Immutable.js, в частности карты. Из того, что я могу сказать, Flow теряет много разума о кодовой базе данных, когда данные живут в структурах Immutable.js вместо простых примитивов JS.

Ответ 1

Теоретически вам придется использовать запись(), которая закодировала ожидаемую форму, а затем добавить typechecking...

За исключением того, что статическая типизация фактических членов этой структуры неизменяемого js будет, к сожалению, невозможна, из-за определенных функции, которые отсутствуют в потоке.

В настоящее время существует пара запросов на отрыв (сначала, второй), чтобы добавить необходимые функции к typechecker, но они довольно привлекательны, и процесс их просмотра и интеграции, похоже, происходит внутри Facebook.

Я подозреваю, что как только они будут объединены, потоковые определения, которые кодируют новую горячность, будут почти сразу же, даже если проект immutable-js не будет интегрировать их так быстро.

Примечание. Если вы хотите предоставить обратную связь, не оставляйте "+1" или "когда это делается комментарии"; они не принимаются для этого хранилища. Вместо этого используйте функцию реакции/голосования.