TypeScript Ferramentas Intermediário
tsconfig e modo strict
O tsconfig.json é o arquivo de configuração do compilador TypeScript. Ele define como o código será verificado e transpilado, incluindo o nível de rigor do sistema de tipos. A opção "strict": true ativa um conjunto de verificações rigorosas que ajudam a evitar erros comuns em tempo de compilação.
Entre as verificações ativadas por strict, destacam-se noImplicitAny (impede que variáveis e parâmetros tenham tipo any inferido implicitamente) e strictNullChecks (faz com que null e undefined sejam tipos distintos e não atribuíveis a outros tipos sem tratamento explícito). Já noUncheckedIndexedAccess não é ativado por strict, mas é altamente recomendado: ele adiciona undefined ao tipo de retorno de acessos por índice, forçando a verificação de existência.
Neste card, você vai aprender a configurar essas opções e a escrever código que se beneficia delas. O objetivo é tornar seus programas mais seguros e previsíveis, capturando erros antes mesmo de executar o código.
Pontos-chave
"strict": trueativa várias verificações, incluindonoImplicitAnyestrictNullChecks.noImplicitAnyproíbe que o compilador infiraanyquando não consegue determinar um tipo.strictNullChecksseparanulleundefineddos demais tipos, exigindo tratamento explícito.noUncheckedIndexedAccessadicionaundefinedao tipo de acessos por índice, comoarr[0].- Para ativar
noUncheckedIndexedAccess, é preciso defini-lo explicitamente, pois não faz parte destrict.
// Exemplo que demonstra os efeitos de strict, noImplicitAny, strictNullChecks e noUncheckedIndexedAccess.
// Para compilar, use um tsconfig.json com as opções ativadas.
// 1. noImplicitAny: parâmetro sem tipo gera erro se a opção estiver ativa.
// function soma(a, b) { return a + b; } // Erro: parâmetros implicitamente any
function soma(a: number, b: number): number {
return a + b;
}
// 2. strictNullChecks: null e undefined não são atribuíveis a number.
function dobra(valor: number | null): number {
if (valor === null) {
return 0; // tratamento explícito
}
return valor * 2;
}
// 3. noUncheckedIndexedAccess: acesso por índice retorna T | undefined.
function primeiroElemento(arr: number[]): number | undefined {
const primeiro = arr[0]; // tipo: number | undefined
if (primeiro === undefined) {
return undefined;
}
return primeiro;
}
// Testando as funções
console.log(soma(2, 3)); // 5
console.log(dobra(5)); // 10
console.log(dobra(null)); // 0
console.log(primeiroElemento([10, 20])); // 10
console.log(primeiroElemento([])); // undefined