Currently tagged templates aren't supported when targeting ES3 or ES5. Tagged templates can be (partially) emitted like this:
foo(["A ", " B ", " C"], 1, 2);
The only difference with ES6 is (if I'm not mistaken) that the raw property on the first argument is missing. I think there are 3 solutions for this:
- Don't allow functions that take a
TemplateStringsArray as first argument, only string[]
- Emit extra code (see below)
- If the function takes a
string[] as first argument, emit as above, otherwise (also if first argument is any), emit as below.
Alternative javascript would be:
var __template;
foo((__template = ["A ", " B ", " C"], __template.raw = ["A ", " B ", " C"], __template), 1, 2);
I'd vote for 1, since the .raw property won't be used in most cases.
I've implemented basic functionality in #1589 (without a solution for the .raw property)
Currently tagged templates aren't supported when targeting ES3 or ES5. Tagged templates can be (partially) emitted like this:
The only difference with ES6 is (if I'm not mistaken) that the
rawproperty on the first argument is missing. I think there are 3 solutions for this:TemplateStringsArrayas first argument, onlystring[]string[]as first argument, emit as above, otherwise (also if first argument isany), emit as below.Alternative javascript would be:
I'd vote for 1, since the
.rawproperty won't be used in most cases.I've implemented basic functionality in #1589 (without a solution for the
.rawproperty)