Skip to content

Have QuickInfo use import types to display type aliases that are not in scope #23642

Open
@kpdonn

Description

@kpdonn

Search Terms:
type alias, import, display, quickinfo, intellisense

Code

// @Filename: file1.ts
export type ComplicatedType<T, U> = { [K in Exclude<keyof T, U>]: T[K] } // could be anything here
export declare function getComplicatedType<T, U extends keyof T>(arg: T, exclude: U): ComplicatedType<T, U>

// @Filename: file2.ts
import { getComplicatedType } from "./file1"
interface SomeInterface {
    a: string
    b<T>(arg: T): T,
    c: { c2: string } | { c3: number },
    d?: boolean
}
declare const test: SomeInterface
const result = getComplicatedType(test, "a") // quickinfo on result currently displays something like:
/* const result: {
    b: <T>(arg: T) => T;
    c: {
        c2: string;
    } | {
        c3: number;
    };
    d: boolean | undefined;
} */

Current behavior:
The quick info type shown for result is a fully expanded anonymous type because ComplicatedType is not in scope in file2. Importing ComplicatedType in file2 makes quick info display const result: ComplicatedType<SomeInterface, "a">, but I don't think it's common to import a type alias purely for the quick info benefit if it isn't actually used anywhere in the file.

While the example above isn't that bad, in some cases (#18754, #23458) the fully expanded types can be so large that they actually cause a performance issue for the language service.

Suggested behavior:
Use import types from #22592 to display an accurate qualified reference to ComplicatedType. So in the example above quick info for result could instead display something like:

const result: import("./file1").ComplicatedType<SomeInterface, "a">

Which, although a little verbose, would be much more readable than many fully expanded types.

Related Issues:
#22592 added import types.

#18754, #23458, #6070, #13095 - Various issues related to the display of types.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Awaiting More FeedbackThis means we'd like to hear from more people who would be helped by this featureDomain: Quick Infoe.g. hover text, tool-tips, and tooltips.SuggestionAn idea for TypeScript

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions