I propose a way of writting identifier tokens, preventing them as being keyword tokens. Useful for lexical references, function parameters and so on, where string literals cannot be used. I suggest one of following syntaxes:
I've adopted a convention from Python's coding standard in my own code to get around these issues. Python recommends you place a trailing underscore on variable names that are otherwise reserved by python, or that would otherwise shadow a global Python function. So, in JavaScript I'll write code like this:
function getId(for_) {
// ...
}
And, really, having a trailing underscore isn't that different from having a variable that you always have to refer to with \#for syntax, in many cases, the \# sort of just becomes part of its name, since that's the only possible way to refer to it.
Though, I could see editors choosing to include the escape in the type-doc strings anyways, because a function signature might look a little confusing if the parameters were unescaped.
For example, this looks a bit odd.
function doThing(return: string): void
So, they might choose to render it like this anyways:
function doThing(\#return: string): void
At which point, we're once again not doing anything better than a trailing underscore:
function doThing(return_: string): void
In some cases, they might even be forced to render the \#, for example, if you named your parameter \#this, they have no choice but to render it as function doThing(\#this: Thing): OtherThing, because an unescaped this commonly means something else - it means it expects you to .call() the function with a specific this parameter of a specific type.