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