Migrar código JavaScript para TypeScript estrito sem partir nada
Converta um ficheiro ou módulo JavaScript para TypeScript com tipos deduzidos do uso real, tsconfig recomendado, lista de erros revelados pelos tipos e plano de migração para o resto. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 4 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.
Intermédio · Código · Pendente de revisão editorial
Prompt
Atua como engenheiro sénior de TypeScript que já migrou grandes bases de código JavaScript de forma incremental.
Contexto:
- Código a migrar: {{codigo_js}}
- Projeto e ferramentas de build: {{projeto}}
- Nível de rigor: {{rigor}}
- Ambiente de execução: {{ambiente}}
Se o código importar módulos que não mostrei ou receber dados de forma pouco clara, pergunta-me antes de inventares tipos.
Entregáveis:
1. Um tsconfig.json recomendado para {{rigor}}, explicando as opções principais (strict, noUncheckedIndexedAccess, allowJs, checkJs, module e moduleResolution conforme o build).
2. O código convertido para TypeScript, com tipos e interfaces deduzidos do uso real. Marca cada tipo suposto com um comentário `// PRESSUPOSTO:`.
3. Dados externos (respostas de API, localStorage, JSON) tipados como `unknown` e validados ou restringidos antes do uso.
4. Lista de erros ou comportamentos duvidosos que os tipos revelaram (possíveis undefined, comparações entre tipos diferentes, argumentos opcionais mal tratados), com a linha e a correção proposta, separada da conversão.
5. Os pacotes @types necessários e alterações nos scripts do package.json ou na configuração do ESLint.
6. Plano para migrar o resto do projeto: ordem dos ficheiros (das folhas para a raiz), como conviver com JS durante a transição e como evitar que os `any` voltem.
Restrições:
- Mantém exatamente o comportamento; não refatores a lógica no mesmo passo.
- Proibido `any`, `as any`, `@ts-ignore` e asserções não nulas `!` sem justificação escrita.
- Se uma correção alterar o comportamento, propõe-na à parte e não a apliques.
- Usa [PREENCHER] para o que não puder ser deduzido.
Formato: tsconfig, código convertido, lista de achados e plano, cada um na sua secção.Como utilizar
- Começa por um ficheiro pequeno com poucas dependências e cola-o completo. 2. Indica o bundler ou framework e o rigor pretendido. 3. Revê os comentários PRESSUPOSTO, corre tsc --noEmit e os testes e repete ficheiro a ficheiro.
Exemplo de utilização
Código: utils/carrinho.js com cálculo de totais e IVA · Projeto: React com Vite e ESLint · Rigor: gradual · Ambiente: navegador.
Exemplo de resultado
tsconfig.json (opções principais)
"strict": true, "allowJs": true, "checkJs": true, "noUncheckedIndexedAccess": true e "moduleResolution": "bundler" (adequado ao Vite). Assim, o JS restante é verificado enquanto migra ficheiro a ficheiro.
utils/carrinho.ts
// PRESSUPOSTO: forma deduzida do uso no ficheiro original
export interface ItemCarrinho {
readonly id: string;
preco: number;
quantidade: number;
}
export function totalCarrinho(itens: readonly ItemCarrinho[], descontoPct = 0): number {
const subtotal = itens.reduce((soma, item) => soma + item.preco * item.quantidade, 0);
return subtotal * (1 - descontoPct / 100);
}
export function carregarCarrinho(): ItemCarrinho[] {
const bruto: unknown = JSON.parse(localStorage.getItem('carrinho') ?? '[]');
return Array.isArray(bruto) ? bruto.filter(eItemCarrinho) : [];
}
function eItemCarrinho(valor: unknown): valor is ItemCarrinho {
if (typeof valor !== 'object' || valor === null) return false;
const v = valor as Record<string, unknown>;
return typeof v.id === 'string' && typeof v.preco === 'number' && typeof v.quantidade === 'number';
}
Problemas detetados (não aplicados)
| Linha | Problema | Proposta |
|---|---|---|
| [PREENCHER] | JSON.parse lança uma exceção se o valor guardado estiver corrompido | Envolver em try/catch e devolver [] |
| [PREENCHER] | desconto chegava às vezes como texto a partir do formulário | Converter com Number() na fronteira |
…
Dados-chave
- Categoria
- Programação e desenvolvimento · TypeScript
- Tipo de resultado
- Código
- Nível
- Intermédio
- Pensado para
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificado em
- Pendente de verificação editorial
- Variáveis
- Código JavaScript, Projeto e build, Nível de rigor e Ambiente de execução
- Idioma
- Português
- Preço
- Gratuito, sem registo
- Atualizado
- 07/11/2026
Perguntas frequentes
Migro tudo de uma vez ou aos poucos?
Aos poucos, em quase todos os projetos. Com allowJs convertes ficheiro a ficheiro, a começar pelos que não dependem de outros, e ativas as opções estritas quando a maior parte já estiver tipada.
Porquê usar unknown em vez de any para dados externos?
Porque unknown obriga-te a verificar a forma dos dados antes de os usar, enquanto any desliga a verificação. Para respostas de API, convém validá-las em tempo de execução, por exemplo com Zod.
A migração pode alterar o comportamento do meu código?
Não deveria. O prompt separa a conversão dos erros revelados pelos tipos, para decidires o que corrigir e testares à parte.
Para que serve este prompt?
Converta um ficheiro ou módulo JavaScript para TypeScript com tipos deduzidos do uso real, tsconfig recomendado, lista de erros revelados pelos tipos e plano de migração para o resto.
Com que ferramentas de IA funciona?
Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.
Como personalizo o prompt?
Clique em “Personalizar” e preencha as variáveis (Código JavaScript, Projeto e build, Nível de rigor e Ambiente de execução). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.
Preciso de experiência para o utilizar?
É de nível intermédio: convém conhecer o tema para fornecer bom contexto e rever o resultado com sentido crítico.
Este prompt é gratuito?
Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.
Posso confiar no resultado da IA?
Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.