键入通用归一化Redux属性选择器的流程

时间:2019-02-01 22:34:53

标签: javascript reactjs redux flowtype

我具有形式为

的归一化redux状态
const store = { data: { byId: {...}, allIds: [...] } } 

这样,我在状态的每个部分都有一个selectData函数。

const selectData = (state: TState, id: TId): TData => state.data.byId[id]

我想创建类型化的selectDataProperty访问作为数据的单个属性,并且仅接受有效的属性作为输入。

const selectDataProperty = <P: $Keys<TData> >
  (state: TState, id: TId, property: P): $ElementType<TData, P> =>
    (selectData(state, id)[property]: any) 

我想用参数化的泛型创建一个HOF,以为商店的每个部分生成这些,但无法使其正常工作。有人有建议吗?我尝试了几种不同的方法,但无法进行打字。这就是我的

// DataType will always be an object
const createSelectProperty = <DataType>(selector: (TState, TId) => DataType) => 
  <P: $Keys<Data>>(state: TState, id: TId, property: P): $ElementType<DataType, P> =>
    const data = selector(state, id) || {};
    return (data[property]: any)



const selectDataProperty = createSelectProperty<TData>(selectData);

// This should pass
selectDataProperty(state, id, 'realProperty');

// This should error
selectDataProperty(state, id, 'fakeProperty');

有人有什么建议吗? Here is a link to what I've been testing on.

0 个答案:

没有答案