Почему в машинописном тексте нельзя применить тип разворота?

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 расширяет любую, в этом случае это должно позволить использовать типы распространения. Но машинописный текст нет и выдает ошибку

[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,
                }
            },
        }
}
2
0
775
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это ограничение текущей (по состоянию на 3.1) реализации распространения в Typescript.

Хорошая новость заключается в том, что следующая версия (3.2) Typescript исправит это. Два PR, которые улучшают обработку параметров спреда и отдыха: Общие переменные и параметры покоя объекта и Универсальные выражения распространения в объектных литералах. Хотя он еще не выпущен, вы можете попробовать его сейчас, используя npm install typescript@next.

В версии 3.2 ваш код работает как есть.

3.2 Должен быть выпущен в ближайшее время, где-то в ноябре 2018 г.

Другие вопросы по теме