microsoft / microsoft/TypeScript

Add allowImportingJsExtensions option to prevent incorrect .js imports

Aberta
#61,371 1 comentário 8 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Awaiting More Feedback Suggestion
Linguagem predominante
Go
Estrelas
111k
Forks
14.3k
Merge médio
2d 4h
PRs com merge (30d)
132

Descrição

🔍 Search Terms

moduleResolution nodenext, import js extension, prevent .js imports, strict module resolution

✅ Viability Checklist
⭐ Suggestion

Introduce a new compiler option:

"allowImportingJsExtensions": false

When set to false, TypeScript should prevent importing .js extensions unless the corresponding .js file physically exists.

Currently, in projects using "moduleResolution": "nodenext", TypeScript allows importing .js extensions even when there is no actual .js file, leading to confusion and incorrect imports in TypeScript-only projects.

📃 Motivating Example

Consider a TypeScript project using "moduleResolution": "nodenext":

import { something } from "./utils.js"; // Allowed, but utils.js does not exist

Here, TypeScript does not raise an error even though utils.js is not present. This can cause issues in projects that exclusively use .ts files and never generate .js files manually.

With the proposed option:

"allowImportingJsExtensions": false

The above import would result in a TypeScript error unless utils.js is physically present.

💻 Use Cases
  1. Prevent incorrect imports in TypeScript-only projects: This option helps ensure .js imports are only allowed when the actual file exists, reducing accidental misconfigurations.
  2. Stricter enforcement of module resolution: This aligns with "moduleResolution": "nodenext", enforcing explicit file extensions while avoiding implicit assumptions.
  3. Avoid runtime errors: Developers may assume a .js file exists due to TypeScript allowing the import, only to discover at runtime that the file is missing. This feature prevents such issues at compile time.
  4. Current workaround is manual: The only way to enforce this today is by manually checking the filesystem or using linting rules, which is not ideal.

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece revisando como as opções do compilador são definidas e como moduleResolution nodenext resolve imports .js. Determine o comportamento pretendido para arquivos .js ausentes e existentes e, em seguida, adicione cobertura direcionada para a opção proposta. O trabalho estará concluído quando a opção estiver documentada e validada, e seu comportamento estiver coberto por testes.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
typescript
Domínio
compilers
Tipo de issue
Funcionalidade
Dificuldade
5/5
Tempo estimado
Mais de uma semana
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
30/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.