microsoft / TypeScript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
https://www.typescriptlang.org
Apache License 2.0
100.16k stars 12.38k forks source link

Function parameter hover info is inconsistent between contexts #59219

Open remcohaszing opened 2 months ago

remcohaszing commented 2 months ago

๐Ÿ”Ž Search Terms

โ€œhoverโ€

๐Ÿ•— Version & Regression Information

โฏ Playground Link

https://www.typescriptlang.org/play/#code/PTAEFUGcFMCdQCbQGYEsB20Gg5VTQBZAEQA1Q0AbaSAOlAHVpEB7dQTAIAXUAYzc9gtKoTgAtUdAFCcAngAdmABUFzIoALygA3pNB7QkFgFtoylnIBcBgRgDmkgL6TJIUAEl0nOOgCGw0dCUCvCyCrTS8swkpADC-NCeZqoaoElqAGTafEZybAmckAD8VloOTpLIAK7oPJyobERkcZ75ABRyKpAlsNA+CGyUMqAA2gDSOOigANbQMizIjbHxiZ0AulbRzV4r5pBjqw4AlNq6+q76F5egAHqFp3quACoBIpFq86AduzhqHdCcslAAHcApNRCwAG5wOygSFwT6dRzOTbLTguMC3dGgZ7MULMD5fZISUCVWyDYGg0DgqGwGFw+AolqeLExHyTIHMIw+GYicS-HoAoY+NQcyiUQqpHrIOA+ABG5KBqDELEq3AwAhYCEqPBh6rgJgQqB8XipgWCrwUUiAA

๐Ÿ’ป Code

// User defined inside MDX files. We donโ€™t control this.
type Props = {
    someProp: string
}

// Internal helper type.
type MDXContentProps = Props & {components?: {}}

function MDXContent(props: {readonly [K in keyof MDXContentProps]: MDXContentProps[K]}) {
    //              ^?
    // The types of props is pretty when hovering over props
}

MDXContent
// ^?
// The type of props is ugly when hovering over MDXContent
// Can we make this pretty as well? Preferably without introducing intermediate helper types.

๐Ÿ™ Actual behavior

Hovering over MDXContent shows the type of the props as written.

Hover info for `MDXContent` with TypeScript 5.5

๐Ÿ™‚ Expected behavior

Hovering over MDXContent shows a pretty formatted type of the props, just like TypeScript 5.4.

Hover info for `MDXContent` with TypeScript 5.4

Additional information about the issue

I initially asked for help on Twitter to prettify this, not realizing this was a regression in TypeScript 5.5.

Later in the thread I was asked to report this bug.

jakebailey commented 2 months ago

Bisects to #58078, though reverting it does not seem to actually change this behavior back.

Note that we more or less always want to be writing declarations back as they were written, as that's an invariant to make isolatedDeclarations work. Hover uses the same logic, but at some level this is related to #59029 and whether or not we need a hover mode which tries to do this "prettification".