Skip to content

JSDocs @typedef parsing runs into infinite loop #40234

Closed
@clshortfuse

Description

@clshortfuse

TypeScript Version: v4.1.0-dev.20200824

Search Terms:

Code

TS:

export type XMLObject<T> = {
  $A: {
    [K in keyof T]?: XMLObject<T[K]>[]
  },
  $O: {
    [K in keyof T]?: {
      $$?: Record<string, string>
    } & (T[K] extends string ? {$:string} : XMLObject<T[K]>)
  },
  $$?: Record<string, string>,
  } & {
  [K in keyof T]?: (
    T[K] extends string ? string
      : XMLObject<T[K]>
  )
};

const p:XMLObject<{foo:string}> = {};

JS:

/**
 * @template T
 * @typedef {{
  $A: {
    [K in keyof T]?: XMLObject<T[K]>[]
  },
  $O: {
    [K in keyof T]?: {
      $$?: Record<string, string>
    } & (T[K] extends string ? {$:string} : XMLObject<T[K]>)
  },
  $$?: Record<string, string>,
  } & {
  [K in keyof T]?: (
    T[K] extends string ? string
      : XMLObject<T[K]>
  )
}} XMLObject<T> */

/** @type {XMLObject<{foo:string}>} */
const p = {};

Expected behavior:

VSCode Intellisense outputs should match and results should somewhat as fast in JS as in TS.

Actual behavior:

Extremely long parsing time, Intellisense mismatch and long, infinitely looping type details. Hovering over XMLObject in the playground link takes a very long time on JS.

JS: loop example

TS:
loop example2

Playground Link:

JS: https://www.typescriptlang.org/play?ts=4.1.0-dev.20200824&useJavaScript=true#code/PQKhCgAIUgBAXApgWwA4BsCGTIBUowICeqiAJogGaQDeNUkAJAIIBctDkkA2gNKQBLAHaQA1oiIB7argC6AfnYANALIAZAPIAjAFaIAxvAA8uPrIB83WQwC+AGgaMN7ely59BI8VJkKXnN0ZGRUgAJQNJACcyIwBneEjhAHM7SHjEoSTzAJtIADJIAApTXllIRAAPJCEyWLSE5Mh5WkZWdOTc5XVtPUMTM3MASlsHLiCQ8P0omPbM1Nms0chcgtcefmExCWk8PyKAkrLK6tr6jKSms+SAri7NXQNjQ+yuYZtc1Xvep-NoYHBwKBCPASIhaJ8eo8jDRKJJJG0GpkbOZciB-lMhPFIKhIABeWg2ADc4CAA

TS: https://www.typescriptlang.org/play?ts=4.1.0-dev.20200824#code/KYDwDg9gTgLgBDAnmYcAaBZAMgeQEYBWwAxjADwAqAfHALxwDeAUHHACQCCAXIy63AG0A0nACWAOzgBrYIggAzOBQC6Afh6ZchEuQrDlVAcr4BfADR82OHs36CRE6bIVK1NvnbZt1cAEoloABMyAGcYKAkAczM4MIjxSKoPOBM4ADI4AAo9IWU4UBhgcUCQ2PCouFVGNi44qNSNbHwiUkp9KgBKUwtWLx9-YiDQ8oSYuoSqHpT03lZhMUkZOUUVH0zknLyCopKy+MjKvajk1katFt12vi6TAG4mJkHxMLgwLk1mnTIGeQgIWpGkRMNHoDDuTCAA

Related Issues:

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions