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 ๋“ฑ๊ธ‰