【发布时间】:2019-03-30 18:13:35
【问题描述】:
export type AddResourceProps<K extends string, T extends any> = (resource: BasicResource) => Record<K, T>
const addtionalResourse = addResourceProps ? addResourceProps(resource) : {} as Record<K,T>
const result = {
...addtionalResourse,
}
所以你可以看到 K 扩展字符串和 T 扩展任何,在这种情况下它应该允许使用扩展类型。但是 typescript 不允许并抛出错误
[ts] Spread types may only be created from object types.
const addtionalResourse: Record<K, T>
完整代码在这里:
export type AddResourceProps<K extends string, T extends any> = (resource: BasicResource) => Record<K, T>
export const buildResourceFromRedux = <A extends ActionCollection, AT, S,K extends string, T>
(getReduxModule: IGetRedux<A, AT, S>, addResourceProps?: AddResourceProps<K, T> ) => {
return {
getRedux: (reduxConfig: IResourceReduxConfig) => {
const reduxModule = getReduxModule(reduxConfig)
return {
...reduxModule,
...reduxConfig,
}
},
getResource: () => {
const reduxModule = getReduxModule({ name: 'resource', local: ['resource']})
const store = getStore(reduxModule.reducer, reduxModule.saga, { name: 'resource' })
// Action
const resource = {
store,
}
const addtionalResourse = addResourceProps ? addResourceProps(resource) : {} as Record<K,T>
return {
...resource,
...addtionalResourse,
}
},
}
}
【问题讨论】:
标签: reactjs typescript redux