TypeScript - опускать расширенный тип generi c - PullRequest
0 голосов
/ 25 мая 2020

У меня проблема с опустить в машинописном тексте. Когда я пытаюсь опустить commandId из TMutationVariables , он выдает ошибку TS:

TS2345: Argument of type 'Pick<TMutationVariables, Exclude<keyof TMutationVariables, "commandId">> & { commandId: string; }' is not assignable to parameter of type 'TMutationVariables'.   'Pick<TMutationVariables, Exclude<keyof TMutationVariables, "commandId">> & { commandId: string; }' is assignable to the constraint of type 'TMutationVariables', but 'TMutationVariables' could be instantiated with a different subtype of constraint '{ commandId: string; }'.
export function createQueryWithSubscription<TMutationVariables extends {commandId: string}>(
    query: string,
): (variables: Omit<TMutationVariables, "commandId">) => any {
    const sendQuery = (changes: TMutationVariables): any =>
        gqlCommand<TMutationVariables>(
            query, changes as any
        );

    return function processQueryWithSubscription(
        variables
    ) {
        return async (dispatch: any) => {
            const commandId = generateUuid();
            //error occurs in declaration BELOW
            const completedVariables: TMutationVariables = {
                ...variables,
                commandId
            };
            const commandFinished = await dispatch(sendQuery(completedVariables));
        };
    };
}

У меня есть тип, созданный из схемы graphql (включая commandId для подписки ), но из-за пределов мне нужны все переменные, созданные из этой схемы, кроме commandId (потому что я присоединяюсь commandId в функции процесса)

1012 * Живой пример:. https://www.typescriptlang.org/play#code / KYDwDg9gTgLgBAMwK4DsDGMCWEVzVYAQxmAEUlgoBPAdUxgAsBlJAIwGd9MwscAeACoBZJDGLYUANUJRMhVgBtg7OKBIoAJioDeaCAFt9hTQEkNALjjsYslAHMAvgD4AFACgAkAEcK1S9ds7ABo3AEpLFwA3GTlFZUsAeX16QRExXikY + SV2ILgAIj1DYw0zfKdQuABeJzhjKjhtTz0UaytgTXJKBqq4FzQGYzt4uGFRcRxpWWzlcLqUHqdPDzsvBQBhAyNNPnrXZe9fKjyBoeU6lXrl0IBuN08CGCQoXGR0DLgwKAg0ZXYu6h0RgsDhcHgSdweDzRaZxdieSpNKGPZ64QjsKjoPoaTDsMDEAaWeqVGqNA4tNpFbalDTVODDFCUYjAACqSEwGhct3JOEpBjAShIGimsRyljG6QkIpmKl6SKhHgAdMqYaLlCEFR4qSUzAcHHcFRT4NrNAAxTAoXEMYC03qEADuhHocBxeIJDBc7A6GgBVH6-MFNulcNC3Kh + s8EYcbiAA

Есть помощь? Спасибо

1 Ответ

0 голосов
/ 25 мая 2020

Вместо использования "extends" в типе сигнатуры функции

export function createQueryWithSubscription<TMutationVariables extends {commandId: string}>(

вы должны объединить объявления следующим образом:

type TMutationVariablesWithCommandId = TMutationVariables & {commandId: string};
export function createQueryWithSubscription<TMutationVariablesWithCommandId>(

Playground Link

...