preserveValueImports + isolatedModules -> type-only ambient const enums #47817
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.
Currently, if you compile
import Big, { RoundingMode } from "big.js"
withpreserveValueImports
andisolatedModules
the import name is preserved and you get at runtime:RoundingMode
is an ambient const enum, defined in @types/big.js. There's no corresponding runtime value in big.js.This PR extends the existing
preserveValueImports
+isolatedModules
requirement, that imported types must be marked type-only, to ambient const enums.If you add the type modifier (
import Big, { type RoundingMode } from "big.js"
), the compiler does remove the import name, solving the runtime error.This PR specifically excludes non-ambient const enums, because they don't lead to runtime errors. (The import name is preserved, but the const enum is also preserved, so not an error at runtime.)