Include types in .d.ts files for unresolved or unmatched module imports#302
Merged
Include types in .d.ts files for unresolved or unmatched module imports#302
Conversation
🦋 Changeset detectedLatest commit: 59532bf The changes in this PR will be included in the next version bump. This PR includes changesets to release 6 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
…esolved or unmatched module imports
d097c09 to
59532bf
Compare
Merged
This was referenced Jan 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Background
Currently, some token importers are not included in the type definitions. For example, consider the following case:
In this situation, the current CSS Modules Kit generates the following type definitions:
In short, specifiers that cannot be resolved (e.g.
./unresolved.module.css) are included in the type definitions. However, specifiers that can be resolved but do not matchinclude/excludepatterns, or modules that are not CSS Modules, are not included.This behavior has an issue: the generated type definitions may change depending on whether the file exists. If
src/unmatched.cssdoes not exist, the generated type definitions become:If the generated type definitions change depending on file existence, implementing watch mode becomes more complex, and parallelizing code generation becomes harder.
Proposal
In principle, token importers with specifiers that cannot be resolved are still included in the type definitions. For example, consider the following:
In this case, CSS Modules Kit generates the following type definitions:
Even if
./unresolved.module.cssor./unmatched.cssdoes not exist, the same type definitions are generated. It is important that the generated type definitions do not change depending on whether the files exist. This provides the following benefits:However, as an exception, URL specifiers are not included in the type definitions, because URL specifiers are typically resolved at runtime.
Drawbacks
import('./unresolved.module.css')andimport('./unmatched.css')are typed asany, and they are spread into thestylesobject via{...any}. As a result,stylesends up being typed asany, and even tokens that should exist (e.g.styles.a_1) becomeany.This is a long-standing issue in css-modules-kit. However, with this change—where unmatched token importers are now included in the type definitions—this problem becomes more noticeable.
I plan to fix this issue in a separate Pull Request later (ref: #303).