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