Complementando os demais (que já mostraram como resolver: colocando a expressão entre colchetes), o nome disso é "Computed property names".
Basicamente, se o nome de uma propriedade é dinâmico, precisa estar entre colchetes. Veja a diferença:
const nomePropriedade = 'abc';
console.log({ nomePropriedade: 1 });
console.log({ [nomePropriedade]: 1 });
Por isso que no seu caso - como já apontado pelos demais - deveria ser return { [`Dia_${varX}`] :'Choveu' }
.
Vale lembrar que você pode usar qualquer expressão, que o resultado será convertido para string e usado como o nome da propriedade:
const nome = 4;
console.log({ [ (nome * 2) / 10 ]: 1 });
function fazAlgo(x) {
return 'algo' + x;
}
console.log({ [ fazAlgo(nome) ]: 1 });
const obj = {
toString: function() {
return 'nome qualquer';
}
}
console.log({ [ obj ]: 1 });
console.log({ [ function () { return 42 } ]: 1 });