microsoft / microsoft/TypeScript

Improve declare module wildcards so that they can match parts of a path more like a glob

Offen
#38,638 8 Kommentare 63 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Awaiting More Feedback Suggestion
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

Search Terms

global module match glob path

Suggestion

Improve the declare module wildcards so that they can be used multiple times in a path and they can match multiple parts of it.

Use Cases

In the project I am currently working on we make a distinction between images and icons:

  • icons are usually small in size and used multiple times so we store them as SVG and put them in a SVG sprite with the help of external-svg-sprite-loader.
  • images are usually bigger in size and used only once so we store them as well as SVGs but do not put them in a sprite.

Since SVG imports are not recognized by TypeScript I want to create a global module declaration that targets all icon imports and another that targets all image imports. However, based on the feedback I got in this StackOverflow issue, it doesn't seem to be possible to do this since the support of wildcards in module paths seems to be very limited.

Examples

This is an example of what I would like to be able to do:

declare module '@my/**/icons/**/*.svg' {
    type IconType = { viewBox: string, symbol: string };

    const icon: IconType;
    export = icon;
}

declare module '@my/**/images/**/*.svg' {
    const url: string;
    export = url;
}

Checklist

My suggestion meets these guidelines:

  • This wouldn't be a breaking change in existing TypeScript/JavaScript code
  • This wouldn't change the runtime behavior of existing JavaScript code
  • This could be implemented without emitting different JS based on the types of the expressions
  • This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
  • This feature would agree with the rest of TypeScript's Design Goals.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit den TypeScript-declare-module-Beispielen des Issues und untersuche, wie Wildcards in Modulpfaden derzeit abgeglichen werden. Vergleiche das bestehende Verhalten mit den angeforderten wiederholten und mehrteiligen Glob-Mustern. Definiere anschließend Tests, die die Icon- und Bildpfade abdecken, und bestätige, dass beide Deklarationen mit den vorgesehenen Imports übereinstimmen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.