microsoft / microsoft/TypeScript

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

Open
#38,638 8 comments 63 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Awaiting More Feedback Suggestion
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the issue's TypeScript declare module examples and investigate how module-path wildcards are currently matched. Compare the existing behavior with the requested repeated and multi-part glob patterns, then define tests covering the icon and image paths and confirm that both declarations match the intended imports.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.