Bevor Sie Probleme einreichen, überprüfen Sie bitte zuerst die folgenden Punkte:
Dies wird Ihnen wahrscheinlich helfen, schneller eine Lösung zu finden.
Für Bugs wäre es toll, eine PR mit einem fehlgeschlagenen Testfall zu haben.
Derzeit erlaubt die Typescript-Definition von Handlebar keine benutzerdefinierten Helfer für die Option knownHelper
anzugeben.
Um also die Option knownHelpersOnly
mit benutzerdefinierten Helfern zu verwenden, müssen Sie knownHelpers
umwandeln, um Typoskriptprüfungen zu umgehen;
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);
Der erzeugte Fehler (ohne Verwendung des unknown
Casts) ist der folgende:
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; }'.
Sollte CompilerOptions
nicht die folgende Definition haben?:
interface CompileOptions {
data?: boolean;
compat?: boolean;
knownHelpers?: { [name: string]: boolean };
knownHelpersOnly?: boolean;
noEscape?: boolean;
strict?: boolean;
assumeObjects?: boolean;
preventIndent?: boolean;
ignoreStandalone?: boolean;
explicitPartialContext?: boolean;
}
(Bekomme ich etwas nicht?. Ich bin bereit, die PR zu senden, wenn dies die richtige Lösung ist)
Danke für das Angebot. Ich habe eine etwas andere Lösung geschoben. Ich denke, um eine korrekte Auto-Vervollständigung für die eingebauten Helfer in IDEs zu erhalten, ist es besser, die eingebauten Namen beizubehalten, aber immer noch jeden anderen Namen zuzulassen.
Danke für die schnelle Lösung! In welcher Version wird es erscheinen?
Nächste Patch-Version. Ich überlege, was ein guter Zeitpunkt dafür wäre. Ich plane Dienstag für die nächste Veröffentlichung.
Veröffentlicht in 4.2.0