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