Handlebars.js: Tipos de texto datilografado: `knownHelpers` não permite auxiliares personalizados

Criado em 28 ago. 2019  ·  4Comentários  ·  Fonte: handlebars-lang/handlebars.js

Antes de apresentar problemas, verifique primeiro os seguintes pontos:

Isso provavelmente o ajudará a encontrar uma solução mais rápida.
Para bugs, seria ótimo ter um PR com um caso de teste com falha.


Atualmente a definição de texto do Handlebar não permite especificar ajudantes personalizados na opção knownHelper .

Portanto, para usar a opção knownHelpersOnly com ajudantes personalizados, você deve lançar o knownHelpers para passar verificações de texto digitalizado;

function given(...args: any[]): string {
  const options = args.pop();

  if (options.fn) {
    let complete = true;
    const proxy = new Proxy(this, {
      get(context, prop: string): object {
        if (!(prop in context)) {
          complete = false;
        }

        return context[prop];
      },
    });

    const text = options.fn(proxy);

    return complete ? text : '';
  }

  return args.some((a: string): boolean => !a) ? '' : args.join(' ');
}

const templateOptions = {
  helpers: {
    first,
  },
};
const compilerOptions = {
  knownHelpers: { first: true } as unknown, // Without this `unknown` compilation fails
  knownHelpersOnly: true,
};

Hanblebars.compile('My nice template {{first "text"}}', compilerOptions)({}, templateOptions);

O erro produzido (sem usar o unknown cast) é o seguinte:

TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
    src/index.test.ts:93:41 - error TS2345: Argument of type '{ knownHelpers: { first: boolean; }; knownHelpersOnly: boolean; }' is not assignable to parameter of type 'CompileOptions'.
      Types of property 'knownHelpers' are incompatible.
        Type '{ first: boolean; }' has no properties in common with type '{ helperMissing?: boolean; blockHelperMissing?: boolean; each?: boolean; if?: boolean; unless?: boolean; with?: boolean; log?: boolean; lookup?: boolean; }'.

Os CompilerOptions não deveriam ter a seguinte definição ?:

interface CompileOptions {
  data?: boolean;
  compat?: boolean;
  knownHelpers?: { [name: string]: boolean };
  knownHelpersOnly?: boolean;
  noEscape?: boolean;
  strict?: boolean;
  assumeObjects?: boolean;
  preventIndent?: boolean;
  ignoreStandalone?: boolean;
  explicitPartialContext?: boolean;
}

(Não estou recebendo algo? Estou disposto a enviar o PR se esta for a solução certa)

Todos 4 comentários

Obrigado pela oferta. Eu empurrei uma correção ligeiramente diferente. Acho que, para obter o preenchimento automático adequado para os auxiliares integrados em IDEs, é melhor manter os nomes integrados, mas ainda permitir qualquer outro nome.

Obrigado pela solução rápida! Em qual versão será lançado?

Próxima versão do patch. Estou pensando em qual seria uma boa hora para fazer isso. Estou planejando terça-feira para o próximo lançamento.

Lançado em 4.2.0

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

morgondag picture morgondag  ·  5Comentários

sontek picture sontek  ·  3Comentários

ShintaroOkuda picture ShintaroOkuda  ·  7Comentários

asgraf picture asgraf  ·  5Comentários

DylanPiercey picture DylanPiercey  ·  7Comentários