2016-03-28 2 views
3

В проекте React я играю с библиотекой MobX. Одна вещь, которую вы можете сделать, это написать свой код, как будто вы работаете с примитивами, но под капотом MobX выполняет некоторую наблюдаемую магию. Я также использую Flow в этом проекте, и мне трудно найти правильный синтаксис для применения к наблюдаемым массивам MobX, которые имеют как минимум два дополнительных метода, заменяют и заглядывают.Как расширить массив с помощью проверки потока?

Файл TS для этого кода довольно подробно, и я довольно новичок в наборе текста. Файл TS можно найти здесь:

https://github.com/mobxjs/mobx/blob/master/src/types/observablearray.ts

Ни один из синтаксиса, который я пытался в потоке будет работать, это, вероятно, все довольно наивным/невежественны.

interface ObservableArray { 
    join(str: string): string; 
    replace(arr: Array<any>): ObservableArray; 
    map(mapFunction: Function): Array<any>; 
    reduce(reducerFunction: Function, initialValue: any): any; 
    peek(): Array<any>; 
} 

type MobxArray = ObservableArray; 

или

interface ObservableArray extends Array { 
    peek(): Array<any>; 
    replace(arr: Array<any>): MobxArray<any>; 
} 

type MobxArray = ObservableArray; 

Большую часть времени я получаю эту ошибку "Прогнозный полиморфный тип вместо типа 'MobxArray'." Я получаю эту ошибку, когда я пытаюсь объявить реквизита для компонента:

type MyComponentProps = { 
    myArray: MobxArray<string>; 
}; 

const MyComponent = observer(({ myArray }: MyComponentProps) => (
    <div>{ ... code ... }</div> 
)); 

ответ

4

я, вероятно, это решение давно, но мой ESLint конфиг жаловалась, и я, вероятно, никогда не текут проверил результаты этого, потому что ошибки no-undef.

interface MobxArray<V> extends Array<V> { 
    replace(arr: Array<V>): MobxArray<V>; 
    peek(): Array<V>; 
} 
2

Я не знаю, является ли автоматическое преобразование машинопись .d.ts файлов потока можно, но если вы посмотрите на сам пакет, вы найдете все интерфейсы в .d.ts файлов в Lib /, что, вероятно, упрощает преобразование (они не находятся в github по мере их создания во время сборки)

Редактирование: возможно, вы даже можете обратиться непосредственно к mobx/lib/index.d.ts, синтаксис потока для интерфейсов кажется довольно похожим.

+0

Был ли мопс когда-либо перевозимым потоком, поскольку этот вопрос был задан? Я думал, что слышал, что они это сделали, но я не могу найти его в документации – Jeff

+0

Да, это так: https://github.com/mobxjs/mobx#flow-support – mweststrate