-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Labels
BugA bug in TypeScriptA bug in TypeScriptES NextNew featurers for ECMAScript (a.k.a. ESNext)New featurers for ECMAScript (a.k.a. ESNext)Help WantedYou can do thisYou can do this
Milestone
Description
Overview
Everyone loves LATEX so ESNext will likely allow tagged template strings to contain backslashes on any sequence - even ones that look like they might contain an invalid Unicode escapes.
In other words, something like
let x = tag `\u{wat}`;is now valid, whereas previously it would be considered an error.
As of this writing, the linked proposal is at Stage 3.
Notes
-
This restriction lift doesn't apply to untagged template strings. For example:
// All of these are still invalid. let bad = `bad escape sequence: \unicode`; let bracingOurselves = `\u{shouldntDoThis}`; let theWorst = `\xtremely bad`;
-
Because there is no appropriate representation for a "cooked" string that contains one of these escapes, the returned value at a position on the top-level array will be
undefined, but the raw representation will be available. For example:function tag(strs) { console.log(strs[0] === undefined); console.log(strs.raw[0] === "\\unicode and \\u{55}"); }
// Prints 'true' twice.
tag\unicode and \u{55}
Proposed Emit
Input:
let x = tag `\u{hello} ${ 100 } \xtraordinary ${ 200 } wonderful ${ 300 } \uworld`;Output:
var x = (
_a = [undefined, undefined, " wonderful ", undefined],
_a.raw = ["\\u{hello} ", " \\xtraordinary ", " wonderful ", " \\uworld"],
tag(_a, 100, 200, 300)
);HerringtonDarkholme and tchetwin
Metadata
Metadata
Assignees
Labels
BugA bug in TypeScriptA bug in TypeScriptES NextNew featurers for ECMAScript (a.k.a. ESNext)New featurers for ECMAScript (a.k.a. ESNext)Help WantedYou can do thisYou can do this