Inicialização do mapa em typescript [duplicado]

Aug 17 2020

Estou tentando inicializar abaixo de Map no texto datilografado. Quando imprimo, parece que está vazio.

let map: Map<string, object> = new Map<string, object> ([
    [
        "api/service/method",
        {
            uriPath: {}
        }
    ],
    [
        "\"type\": \"html\"",
        {
            body: {}
        }
    ]
]);

console.log(JSON.stringify(map));
// printing {}
// but not the initialized values

Respostas

1 MauriceNino Aug 17 2020 at 14:35

Ele é inicializado corretamente, mas imprimi-lo não imprime todos os valores como uma matriz. Mas você pode verificar acessando apenas as chaves - elas existem:

let map = new Map([
    [
        "api/service/method",
        {
            uriPath: {}
        }
    ],
    [
        "\"type\": \"html\"",
        {
            body: {}
        }
    ]
]);

console.log(map);
console.log(map.get('api/service/method'));
console.log(map.get('"type": "html"'));

Também relevante: Como posso exibir um objeto de mapa javascript ES6 no console?

Conforme declarado lá, você pode simplesmente espalhar o mapa e imprimir:

let map = new Map([
    [
        "api/service/method",
        {
            uriPath: {}
        }
    ],
    [
        "\"type\": \"html\"",
        {
            body: {}
        }
    ]
]);

console.log([...map]);

JessevanAssen Aug 17 2020 at 14:35

Isso porque JSON.stringifynão sabe como stringificar um Mapa, então ele tentará stringificar o objeto subjacente, o que resulta em um objeto vazio.

Tente ao console.log(JSON.stringify([...a.entries()]));invés

NiettheDarkAbsol Aug 17 2020 at 14:35

A stringificação de um objeto envolve a stringificação de suas propriedades, mas a Mapnão usa propriedades para salvar seus dados. Assim, você obtém um objeto vazio se ingenuamente restringi-lo.

Em vez disso, converta-o em uma matriz primeiro:

console.log(JSON.stringify([...map]));
LionelFoxcroft Aug 17 2020 at 14:39

Quando você usa JSON.stringify () em um mapa, ele sempre fornecerá {}. Se o texto digitado disser que você está fazendo certo, o mapa provavelmente foi inicializado corretamente.