microsoft / TypeScript-TmLanguage

TextMate grammar files for TypeScript for VS Code, Sublime Text, and Atom.
MIT License
397 stars 125 forks source link

String Literal Param in Default Type Definition in Interface Function Causes Breakage #1035

Open frank-weindel opened 1 week ago

frank-weindel commented 1 week ago

Code

let var1;

interface MyInterface {
  func<T = Lowercase<'StringLiteral'>>(): T;
}

let var2;

JavaScript and TypeScript Nightly version: 5.6.0-dev.20240623

Screenshot 2024-06-24 at 12 33 28 PM

Breakage continues for many other keywords at the same block level such as: let, const, export, for, while, interface etc. class itself seems to overcome the breakage.

frank-weindel commented 1 week ago

I've confirmed this also occurs with double quoted " string literal types and number literal types. As well as when the extends keyword is used.

let var1;

interface MyInterface {
  func1<T = Lowercase<'StringLiteral'>>(): T;
  func2<T = Lowercase<"StringLiteral">>(): T;
  func3<T = Lowercase<123>>(): T;
}

let var2;
let var1;

interface MyInterface {
  func1<T extends Lowercase<'StringLiteral'>>(): T;
  func2<T extends Lowercase<"StringLiteral">>(): T;
  func3<T extends Lowercase<123>>(): T;
}

let var2;