Есть ли способ продолжить работу с шаблоном после начального выражения / присваивания?
Как и ожидалось, это работает:
const testTag = (strings, ...values) => console.log(strings, values);
testTag `${'this'}${'is'}${'test'}`;
> ["", "", "", ""], raw: ["", "", "", ""]
> ["this", "is", "test"]
Это не так:
const testTag = (strings, ...values) => console.log(strings, values);
const testLiteral = `${'this'}${'is'}${'test'}`;
testTag testLiteral;
> Uncaught SyntaxError: Unexpected identifier
const testTag = (strings, ...values) => console.log(strings, values);
const testLiteral = `${'this'}${'is'}${'test'}`;
testTag `${testLiteral}`;
> ["", ""], raw: ["", ""]
> ["thisistest"]
const testTag = (strings, ...values) => console.log(strings, values);
const testLiteralMaker = () => `${'this'}${'is'}${'test'}`;
testTag `${testLiteralMaker()}`;
> ["", ""], raw: ["", ""]
> ["thisistest"]
const testTag = (strings, ...values) => console.log(strings, values);
const testLiteralMaker = () => `${'this'}${'is'}${'test'}`;
testTag(testLiteralMaker());
> thisistest
> []
const testTag = (strings, ...values) => console.log(strings, values);
const testLiteralMaker = () => `${'this'}${'is'}${'test'}`;
testTag(...testLiteralMaker());
> t
> ["h", "i", "s", "i", "s", "t", "e", "s", "t"]
((strings, ...values) => console.log(strings, values))(`${'this'}${'is'}${'test'}`)
> thisistest
> []
((strings, ...values) => console.log(strings, values))((() => `${'this'}${'is'}${'test'}`)())
> thisistest
> []
Меня интересует способ, которым я могу написать повторно используемый код с использованием литералов шаблона, но я не могу понять, как две функции могут их совместно использовать.