Handlebars.js: Tipos de mecanografiado: `knownHelpers` no permite ayudantes personalizados

Creado en 28 ago. 2019  ·  4Comentarios  ·  Fuente: handlebars-lang/handlebars.js

Antes de presentar problemas, primero verifique los siguientes puntos:

Esto probablemente le ayudará a encontrar una solución más rápido.
Para los errores, sería genial tener un PR con un caso de prueba fallido.


Actualmente, la definición de mecanografiado de Handlebar no permite especificar ayudantes personalizados en la opción knownHelper .

Por lo tanto, para usar la opción knownHelpersOnly con ayudantes personalizados, debe lanzar el knownHelpers para pasar las comprobaciones mecanografiadas;

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);

El error producido (sin usar el elenco unknown ) es el siguiente:

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; }'.

¿No debería el CompilerOptions tener la siguiente definición ?:

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

(¿No obtengo algo? Estoy dispuesto a enviar el PR si esta es la solución correcta)

Todos 4 comentarios

Gracias por la oferta. He empujado una solución ligeramente diferente. Creo que para obtener una autocompletación adecuada para los ayudantes integrados en los IDE, es mejor mantener los nombres integrados, pero aún permitir cualquier otro nombre.

¡Gracias por la solución rápida! ¿En qué versión se lanzará?

Próxima versión del parche. Estoy pensando cuál sería un buen momento para hacerlo. Estoy planeando el martes para el próximo lanzamiento.

Publicado en 4.2.0

¿Fue útil esta página
0 / 5 - 0 calificaciones