Executando verificação de segurança...
1

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.

4

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:

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

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