【问题标题】:Why `Record` cannot be applied spread type in typescript?为什么`记录`不能在打字稿中应用传播类型?
【发布时间】: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


    【解决方案1】:

    这是当前(从 3.1 开始)在 Typescript 中实现传播的限制。

    好消息是 Typescript 的下一个版本 (3.2) 将解决这个问题。改进处理扩展和剩余参数的两个 PR 是:Generic object rest variables and parametersGeneric spread expressions in object literals 虽然尚未发布,但您现在可以使用 npm install typescript@next 进行尝试。

    在 3.2 中,您的代码可以按原样运行。

    3.2 应该很快发布,2018 年 11 月的某个时间

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 2018-12-13
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 2022-11-18
      • 1970-01-01
      相关资源
      最近更新 更多