2017-02-23 6 views
12

Как вы определяете форму структуры данных Immutable.JS, сгенерированной из fromJS с использованием Flow? Простые старые JS сгустки могут быть набраны очень точно с помощью литерала объекта обозначения:Поток: Typechecking комплекс Неизменяемая форма с использованием 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, кажется, есть два основных осложнения:

  1. Оно кажется, что Неизменный метод .js в fromJS возвращает any (https://github.com/facebook/immutable-js/blob/master/type-definitions/immutable.js.flow#L764), так что следующий не зацепила как ошибка в потоке:

    const map: boolean = fromJS(obj) // this is totally not true, but Flow can't tell 
    
  2. Похоже, что формы карты нельзя описать, используя объектно-ориентированную нотацию за How to describe Immutable.js Map shape with Flow (или эта информация устарела?).

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

+0

Что касается https://github.com/flowtype/flow-typed, вы можете просто загрузить определение типа карты –

+0

Нет определений для immutabe.js при типизированном потоке, они включаются непосредственно в файл immutable.js пакет от npm. Однако определение карты, включенное в файл immutable.js, прямо сейчас не позволяет вам определить форму: https://github.com/facebook/immutable-js/blob/master/type-definitions/immutable.js.flow# L489 –

ответ

0

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

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

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

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

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

+1

Я вижу, что PR теперь закрыты. Любой пример о том, как это сделать, если это возможно сейчас? –

+1

Вместо этих PRs решение, к которому пришли потоки, состояло в том, чтобы добавить функцию * new * type, $ ElementType, которая имеет необходимые функции. См. https://flow.org/try/#0C4TwDgpgBA0hJQLxQOQGt4oNwChSSgBUkoBvKDEALigDsBXAWwCMIAnKAX1wBMIBjADYBDNtABuoqGDYB7MDQAkAUUERGEWsELgIAHkIAaOCAB8uIA – azernik

Смежные вопросы