Есть ли способ создать помеченный шаблон, используемый в функции с параметрами? - PullRequest
1 голос
/ 07 августа 2020

У меня есть эта функция, которую можно использовать как тегированный литерал:

function stringTemplate(strings, ...keys) {
  // Oggetto contenente i valori da interpolare
  return dict => {
    return keys.reduce(
      (acc, value, idx) => `${acc}${dict[value]}${strings[idx + 1]}`,
      strings[0],
    )
  }
}

, и я хочу использовать вот так:

const template = `Foo ${'a'} baz`
stringTemplate`${template}`({ a: 'bar' })

, но она возвращает undefined

Чтобы заставить его работать, нужно использовать eval , например:

const template = `Foo ${'a'} baz`
eval(`string = stringTemplate${template}({ a: 'bar' })`)

, но я бы хотел избежать eval, потому что шаблон поступает из внешнего API.

1 Ответ

0 голосов
/ 07 августа 2020

Ваша функция тега работает нормально. Только вам нужно применить его непосредственно к шаблонному литералу, который вы интерполируете:

const template = stringTemplate`Foo ${'a'} baz`;
template({ a: 'bar' });

В вашем случае const template = `Foo ${'a'} ba` создавал строку, а stringTemplate`${template}` совпадает с вызовом stringTemplate(['', ''], template) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...