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

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';

// sem colchetes, "nomePropriedade" é literalmente o nome da propriedade
console.log({ nomePropriedade: 1 });   // { nomePropriedade: 1 }

// com colchetes, o nome da propriedade será o valor da variável nomePropriedade
console.log({ [nomePropriedade]: 1 }); // { abc: 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;

// resultado da conta é 0.8, que é convertido para string e passa a ser o nome da propriedade
console.log({ [ (nome * 2) / 10 ]: 1 }); // { '0.8': 1 }

function fazAlgo(x) {
    return 'algo' + x;
}
console.log({ [ fazAlgo(nome) ]: 1 }); // { algo4: 1 }

const obj = {
    toString: function() {
        return 'nome qualquer';
    }
}
// obj é convertido para string (implicitamente chama obj.toString())
console.log({ [ obj ]: 1 }); // { 'nome qualquer': 1 }

// até mesmo a função é convertida para string
console.log({ [ function () { return 42 } ]: 1 }); // { 'function () { return 42 }': 1 }
Carregando publicação patrocinada...
1