在提交问题之前,请先检查以下几点:
这可能会帮助您更快地获得解决方案。
对于错误,拥有一个测试用例失败的 PR 会很棒。
目前Handlebar 的打字稿定义不允许在knownHelper
选项上指定自定义帮助程序。
因此,要将knownHelpersOnly
选项与自定义助手一起使用,您必须强制转换knownHelpers
以绕过打字稿检查;
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);
产生的错误(不使用unknown
强制转换)如下:
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; }'.
CompilerOptions
不应该有以下定义吗?:
interface CompileOptions {
data?: boolean;
compat?: boolean;
knownHelpers?: { [name: string]: boolean };
knownHelpersOnly?: boolean;
noEscape?: boolean;
strict?: boolean;
assumeObjects?: boolean;
preventIndent?: boolean;
ignoreStandalone?: boolean;
explicitPartialContext?: boolean;
}
(我没有得到什么吗?如果这是正确的解决方案,我愿意发送 PR)
谢谢你的报价。 我推了一个稍微不同的修复。 我认为为了在 IDE 中为内置助手获得正确的自动完成,最好保留内置名称,但仍然允许任何其他名称。
感谢您的快速修复! 会在哪个版本发布?
下一个补丁版本。 我在想什么是做这件事的好时机。 我计划在周二发布下一个版本。
4.2.0 发布