programandoai

tsconfig.json e o que o modo strict realmente liga

strict: true não é um interruptor único. É um pacote de vários interruptores menores, cada um pegando uma categoria diferente de bug.

Estudar esta lição interativa →

Todo projeto TypeScript de verdade tem um arquivo tsconfig.json na raiz, criado normalmente com o comando tsc --init. Ele não muda o que é ou não é JavaScript válido, mas configura quão rigoroso o compilador deve ser ao checar o seu código: onde procurar arquivos, para qual versão de JavaScript compilar, e, o mais importante para quem está aprendendo, quais categorias de erro valem a pena travar.

A opção mais importante desse arquivo é strict. Ligá-la ("strict": true, o padrão recomendado para projetos novos) não liga uma checagem, liga um pacote de várias checagens menores de uma vez:

Flag dentro de strictO que passa a ser erro
noImplicitAnyUm parâmetro sem tipo e sem valor para inferir (como function f(x) {}) deixa de virar any silenciosamente
strictNullChecksnull e undefined deixam de ser aceitos em qualquer tipo; um valor number | null exige narrowing antes de usar métodos de number
strictFunctionTypesA checagem de parâmetros de função passa a ser mais rigorosa ao comparar tipos de função entre si
alwaysStrictTodo arquivo compilado é emitido com "use strict" (o modo estrito clássico do JavaScript)

Um recorte das checagens mais relevantes dentro do pacote strict; a lista completa é maior.

Pense em strict como o quadro de disjuntores de uma casa: em vez de um único interruptor geral, existe um disjuntor separado para cada área (cozinha, quarto, área externa). Ligar "tudo" de uma vez é o jeito recomendado para uma casa nova, mas cada disjuntor também pode ser entendido, e ajustado, individualmente, se um caso específico realmente precisar.

Este curso já roda com strict ligado

O editor deste curso (a mesma infraestrutura que checa cada célula de código que você roda aqui) usa strict: true, igual ao recomendado num projeto real. Por isso um exemplo como let idade: number | null = null; idade.toFixed(); mostra o diagnóstico 'idade' is possibly 'null' (TS18047) logo ao digitar. Esse erro não é implicância: ele impede o bug clássico de chamar um método num valor que pode não existir.

O padrão de código que strictNullChecks cobra é simples, e você já aprendeu a ferramenta certa para ele no Módulo 6: narrowing. Em vez de assumir que um valor está sempre presente, você testa antes de usar:

// O padrão que strictNullChecks cobra: narrowing antes de usar o valor.
let idadeOuNula: number | null = 30;

function formatarIdade(idade: number | null): string {
  if (idade === null) {
    return "idade não informada";
  }
  return idade + " anos"; // aqui, idade só pode ser number
}

console.log(formatarIdade(idadeOuNula));

É este padrão que strictNullChecks cobra: testar o null antes de usar o valor.

Ao começar um projeto de verdade

Num projeto próprio, a sequência é: npm init -y, depois npm i -D typescript (o tsc vem desse pacote, então ele precisa estar instalado), e então npx tsc --init. Nas versões recentes (5.9 em diante), o tsconfig.json gerado já traz "strict": true ativo, junto com checagens extras como noUncheckedIndexedAccess. A recomendação quase unânime da comunidade é deixar ligado desde o primeiro dia: é bem mais fácil manter um projeto estrito desde o início do que apertar o rigor depois, com centenas de arquivos já escritos de um jeito mais permissivo.

← Voltar ao índice do curso