Obs: todos os erros do javascript citados podem serem contornados usando o typescript

Isso é verdade, ou quase, mesmo com TypeScript, ainda sim podemos ter algo como:

const anyConst = { a: "say A", b: "say B" }
anyConst['a'].toUpperCase() // Sem erro
anyConst['c'].toUpperCase() // TypeError: Cannot read properties of undefined (reading 'toUpperCase')

Ai nesses casos em que pode dar undefined temos que validar.

O TypeScript resolve muita coisa, mas ainda sim podemos ter erros, e os testes unitarios que vão nos ajudar a encontra-los antes de ir para produção.

Na verdade esse tipo de sintaxe está literalmente contornado a verificação do typescript e não seria a forma correta de utilizar, aqui um exemplo onde na ultima linha o typescript acusa de erro: ```ts const anyConst = {a: "say A", b: "say B"}; //jeito errado anyConst['a'].toUpperCase(); anyConst['c'].toUpperCase(); // não acusa erro na compilação //jeito certo anyConst.a.toUpperCase(); anyConst.c.toUpperCase(); // acusa erro na compilação ``` não imagino uma ocasião onde seria necessario utilizar essa forma anyConst['c'], caso seja necessario ter usar uma estrutura parecida com essa eu optaria por usar um map dessa forma ```ts const anyConst = new Map([ ["a","say A"], ["b","say B"] ]); anyConst.get('a').toUpperCase(); // acusa erro na compilação anyConst.get('c').toUpperCase(); // acusa erro na compilação //forma de burla o typescript: anyConst.get('c')?.toUpperCase(); // não acusa erro na compilação somente na execusão ``` dessa forma o typescript ira funcionar e proteger o seu codigo de uma forma muito parecida com o Option do rust, ou com o Optional do java caso você queira burla essas verificação do typescript você precisar usar essa sinxtaxe `anyConst.get('c')?.toUpperCase();` oque não é recomendavel, e o programador que fizer isso estara de proposito fazendo algo errado