diff --git a/.changeset/three-adults-exist.md b/.changeset/three-adults-exist.md new file mode 100644 index 000000000..f73b3624d --- /dev/null +++ b/.changeset/three-adults-exist.md @@ -0,0 +1,5 @@ +--- +'astro': major +--- + +Update `tsconfig.json` presets with `moduleResolution: 'bundler'` and other new options from TypeScript 5.0. Astro now assumes that you use TypeScript 5.0 (March 2023), or that your editor includes it, ex: VS Code 1.77 diff --git a/packages/astro/tsconfigs/base.json b/packages/astro/tsconfigs/base.json index aa1f17543..d921ef4be 100644 --- a/packages/astro/tsconfigs/base.json +++ b/packages/astro/tsconfigs/base.json @@ -5,14 +5,19 @@ "target": "ESNext", "module": "ESNext", // Enable node-style module resolution, for things like npm package imports. - "moduleResolution": "node", + "moduleResolution": "Bundler", + // Allow importing TypeScript files using their native extension (.ts(x)). + "allowImportingTsExtensions": true, // Enable JSON imports. "resolveJsonModule": true, - // Enable stricter transpilation for better output. + // Enforce the usage of type-only imports when needed, which helps avoiding bundling issues. + "verbatimModuleSyntax": true, + // Ensure that each file can be transpiled without relying on other imports. + // This is redundant with the previous option, however it ensures that it's on even if someone disable `verbatimModuleSyntax` "isolatedModules": true, // Astro directly run TypeScript code, no transpilation needed. "noEmit": true, - // Report an error when importing a file using a casing different from the casing on disk. + // Report an error when importing a file using a casing different from another import of the same file. "forceConsistentCasingInFileNames": true, // Properly support importing CJS modules in ESM "esModuleInterop": true, @@ -23,9 +28,6 @@ "paths": { "~/assets/*": ["src/assets/*"] }, - // TypeScript 5.0 changed how `isolatedModules` and `importsNotUsedAsValues` works, deprecating the later - // Until the majority of users are on TypeScript 5.0, we'll have to supress those deprecation errors - "ignoreDeprecations": "5.0", // Allow JavaScript files to be imported "allowJs": true } diff --git a/packages/astro/tsconfigs/strict.json b/packages/astro/tsconfigs/strict.json index bc87a68e0..3064440a5 100644 --- a/packages/astro/tsconfigs/strict.json +++ b/packages/astro/tsconfigs/strict.json @@ -2,8 +2,7 @@ "$schema": "https://json.schemastore.org/tsconfig", "extends": "./base.json", "compilerOptions": { - "strict": true, - // Error when a value import is only used as a type. - "importsNotUsedAsValues": "error" + // Enable strict mode. This enables a few options at a time, see https://www.typescriptlang.org/tsconfig#strict for a list. + "strict": true } }