Handlebars.js: Typescriptタイプ: `knownHelpers`はカスタムヘルパーを許可しません

作成日 2019年08月28日  ·  4コメント  ·  ソース: handlebars-lang/handlebars.js

問題を提出する前に、まず次の点を確認してください。

これはおそらく、解決策をより早く得るのに役立ちます。
バグについては、テストケースが失敗したPRがあると便利です。


現在、 Handlebarのtypescript定義では、 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を送信するつもりです)

全てのコメント4件

申し出に感謝。 少し異なる修正をプッシュしました。 IDEの組み込みヘルパーの適切なオートコンプリートを取得するには、組み込み名を保持し、それでも他の名前を許可する方がよいと思います。

迅速な修正をありがとう! どのバージョンでリリースされますか?

次のパッチバージョン。 私はそれをするのに良い時期は何だろうと考えています。 次のリリースのために火曜日を計画しています。

4.2.0でリリース

このページは役に立ちましたか?
0 / 5 - 0 評価