microsoft / microsoft/TypeScript

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

Ouverte
#23,642 0 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Awaiting More Feedback Domain: LS: Quick Info Suggestion
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

Description

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.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par la reproduction file1.ts/file2.ts et le comportement de QuickInfo décrit dans l’issue ; examinez les types d’importation de l’issue #22592 et les issues associées à l’affichage des types. C’est terminé lorsque QuickInfo peut afficher une référence de type d’importation qualifiée telle que import("./file1").ComplicatedType<SomeInterface, "a"> au lieu de développer l’alias.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
typescript
Domaine
tooling
Type d'issue
Fonctionnalité
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.