Handlebars.js: Types dactylographiés : `knownHelpers` n'autorise pas les aides personnalisées

Créé le 28 août 2019  ·  4Commentaires  ·  Source: handlebars-lang/handlebars.js

Avant de signaler des problèmes, veuillez d'abord vérifier les points suivants :

Cela vous aidera probablement à trouver une solution plus rapidement.
Pour les bogues, ce serait formidable d'avoir un PR avec un cas de test défaillant.


Actuellement, la définition dactylographiée de Handlebar ne permet pas de spécifier des aides personnalisées sur l'option knownHelper .

Ainsi, pour utiliser l'option knownHelpersOnly avec des aides personnalisées, vous devez lancer le knownHelpers afin de contourner les vérifications de type script ;

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

L'erreur produite (sans utiliser le cast unknown ) est la suivante :

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

Le CompilerOptions ne devrait-il pas avoir la définition suivante ? :

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

(Est-ce que je ne reçois pas quelque chose ?. Je suis prêt à envoyer le PR si c'est la bonne solution)

Tous les 4 commentaires

Merci pour l'offre. J'ai poussé un correctif légèrement différent. Je pense qu'afin d'obtenir une auto-complétion appropriée pour les assistants intégrés dans les IDE, il est préférable de conserver les noms intégrés, mais d'autoriser tout autre nom.

Merci pour la réparation rapide! Dans quelle version sortira-t-il ?

Prochaine version du correctif. Je me demande quel serait le bon moment pour le faire. Je prévois mardi pour la prochaine version.

Sorti en 4.2.0

Cette page vous a été utile?
0 / 5 - 0 notes