There are certainly situations where TypeScript has waited to add expression-level syntax until it was clear that JavaScript would almost certainly support this. The current threshold for this is when an ECMAScript proposal reaches Stage 3 of the TC39 Process.
Because TypeScript allows you to target
a particular version of ECMAScript when you build, this often means that such new features will be downleveled if your targeted version doesn't support the feature. This may end up looking like TypeScript has added expression-level syntax, since the feature shows up in TypeScript earlier than whatever runtime engine you're using. But it's not really doing so.
Features like optional chaining and nullish coalescing are evidence that TypeScript did not add expression-level syntax, since the order of operations was something like
someone suggests a feature in TS that would require expression level syntax... e.g., "safe navigation" operator, microsoft/TypeScript#16, now known as optional chaining.
this is not implemented in TS... e.g., this comment in ms/TS#16.
instead, it is created as a Stage 0 TC39 proposal. This proposal makes it to Stage 1, then Stage 2, then Stage 3 of the TC39 Process
at this point it is implemented in TypeScript, see microsoft/TypeScript#33294.
for a brief time this is technically expression-level syntax added to TypeScript before it is part of the actual ECMAScript spec
the proposal makes it to Stage 4
it is included in the next ECMAScript language specification, see ES2020.
If that's still too ambiguous, then we should find examples of proposed TypeScript features that would have required expression-level syntax, but which were rejected, and have, at least so far, stayed rejected because the feature was either never proposed to TC39 or the proposal has, at least so far, not reached Stage 3.
One such feature is microsoft/TypeScript#1579, the proposed nameof
operator, which would evaluate an expression to a string version of itself, possibly as requested here. So const a = 5; console.log(nameof(a))
presumably prints "a"
.
This was never implemented. The request was eventually marked as Waiting for TC39 and eventually the GitHub issue was locked.
So there you go. Note that there are examples of expression-level syntax features added to TypeScript and then not added to JavaScript, or where the JavaScript version changed significantly enough from the proposal that the TypeScript work had to be undone or changed, with much headaches all around. I'm not going to go too much into this, but I'll just list some here:
Never or not yet part of JS: enum
s; protected
class fields; private
class fields; parameter proprties; namespace
s.
Part of JS or soon to be part of JS but where the TS implementation does not conform to the spec and has been or will need to be fixed: public class fields; decorators.