vk-io icon indicating copy to clipboard operation
vk-io copied to clipboard

Поддержка Extended Response для методов

Open AlexXanderGrib opened this issue 5 years ago • 3 comments

Как известно, с этими методами много проблем, из-за их двоякого ответа, но я недавно нашёл решение, которое позволит всё типизировать корректно.

const method = ts.createMethodSignature(
    [ts.createTypeParameterDeclaration("Params", paramsType, undefined)],
    [params],

    hasExtendedResponse
      ? ts.createConditionalTypeNode(
          // Тут можно было бы и по-красивее, но с длинными названиями методов
          // в Typescript Compiler API - нет, просто нет
          ts.createTypeReferenceNode('Params["extended"]', undefined),
          Creator.union([
            ts.createTypeReferenceNode("true", undefined),
            ts.createTypeReferenceNode("1", undefined)
          ]),
          ts.createTypeReferenceNode("Promise", [extendedResponseType]),
          ts.createTypeReferenceNode("Promise", [responseType])
        )
      : ts.createTypeReferenceNode("Promise", [responseType]),
    methodName,
    undefined
  );

Где

const params = ts.createParameter(
    undefined,
    undefined,
    undefined,
    "params",
    hasParams 
      ? undefined 
      // Если нет required в описании параметров или в принципе нет параметров
      : ts.createToken(ts.SyntaxKind.QuestionToken),
    ts.createTypeReferenceNode("Params", undefined), 
    undefined
  );

И да, это именно issue, потому что я понятия не имею как работает ваш генератор, я писал свой(чисто экперементировал), и это вырезка оттуда.

AlexXanderGrib avatar May 16 '20 13:05 AlexXanderGrib

Выглядит хорошо, но нужно будет переписать генератор. Так как он рассчитан на старую схему JSON.

negezor avatar May 19 '20 07:05 negezor

Насколько я понимаю, это методы с параметром fields (?) Очень бы хотелось увидеть динамическую типизацию ответов таких запросов.

Думаю, будет релевантно: https://github.com/drizzle-team/drizzle-orm#feature-showcase-postgresql SQL Query Builder с очень хорошей типизацией. Возможно, можно что-нибудь адаптировать оттуда.

Shmookoff avatar Apr 26 '23 20:04 Shmookoff

Насколько я понимаю, это методы с параметром fields (?) Очень бы хотелось увидеть динамическую типизацию ответов таких запросов.

Это в первую очередь про поддержку параметра extended: 1. Название методов одно - ответ кардинально разный

AlexXanderGrib avatar May 03 '23 10:05 AlexXanderGrib