Handlebars.js: أنواع الكتابة: لا يسمح "knownHelpers" بالمساعدين المخصصين

تم إنشاؤها على ٢٨ أغسطس ٢٠١٩  ·  4تعليقات  ·  مصدر: handlebars-lang/handlebars.js

قبل تقديم المشكلات ، يرجى التحقق من النقاط التالية أولاً:

سيساعدك هذا على الأرجح في الحصول على حل بشكل أسرع.
بالنسبة للأخطاء ، سيكون من الرائع أن يكون لديك علاقات عامة مع حالة اختبار فاشلة.


لا يسمح تعريف الخط المطبوع للمقود حاليًا بتحديد مساعدين مخصصين على الخيار 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 cast) هو التالي:

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 التقييمات