Incorporate elements into an array using TypeScript's map method

I'm working with a JS Map that's defined as

let mappy = new Map<string, string[]>()
I want to add elements to the array using the key. I could do it like this:

mappy.set(theKey, mappy.get(theKey).push('somevalue'));

This seems like a lot of code just for adding an element. If I used a simple object instead, I could easily achieve the same result:

let mappy = {};
mappy[theKey] = [];

Then later on, I can simply use mappy[theKey].push('somevalue'). However, this approach defeats the purpose of having typed objects in TypeScript.

Is there a way to add elements to the array within the map without needing to first "get" it?

Answer №1

To access the array in the Map object and add additional values to it, you can simply get a reference to the array. There is no requirement to re-insert it into the Map, as it remains there.

mappy.get(theKey)!.push('somevalue');

The presence of ! after mappy.get(theKey) is essential because TypeScript generates an error when the value returned by mappy.get() could potentially be undefined. By using the exclamation mark, we confirm that the value is indeed defined. This is known as a "definite assignment assertion"; a feature introduced in TypeScript 2.7.

You can test this code snippet here.


If preferred, you can utilize a regular object instead of a Map:

type MyMap = { [K: string]: string[] };
let mappy: MyMap = {};

mappy[theKey] = [];
mappy[theKey].push('somevalue');

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Unable to associate a model with an additional attribute in objection because of a TypeScript issue

I'm attempting to establish a connection between two models while adding an additional property called "url": if (typeof session.id === "number") { const sessionUser = await Session.relatedQuery("users") .for(session.id) .relate({ id: ...

I have noticed that when using Typescript, it seems to eliminate certain parts of my file

Imagine a scenario where a class adds itself to another class in the following manner bar.ts: import { Foo } from './foo'; export class Bar {} Foo.prop = Bar; Now, consider the file foo.ts export class Foo { public static prop: any; } ...

How come there isn't any spacing between my Angular Material cards in Angular 8?

I am currently studying Angular 8 and need some help figuring out why there is no space between these cards. The image below indicates a red line where the space should be. https://i.sstatic.net/riMYF.png Below is my Component html: <mat-card class=" ...

What is the best way to sort through an array depending on a specific sequence of elements provided

I am trying to create a custom pipe in Angular 5 that filters an array of events based on a given sequence. For instance, if my data is: ["submit", "click", "go_back", "click",...] I want to filter this data based on up to three inputs. If input ...

What function does the super() method serve in TypeScript subclasses?

On top of being irritating and requiring modifications to every child class whenever the parent class is updated... ...

Angular location services

I'm experiencing some difficulties with the geolocation feature. It works fine when the user clicks allow, but there's an issue when using If else. If the user clicks deny, it doesn't insert into the else block. You can check out this DEMO f ...

Dynamic form groups in Angular: Avoiding the issue of form inputs not binding to form groups

Purpose My goal is to develop a dynamic form in Angular that adjusts its fields based on an array received from the backend. For example, if the array contains ["one", "two", "three", "four"], the form should only ...

Exploring arrays within objects with Angular

REACT: this.countries = this.api.fetchAllCountries(); this.countries.forEach(item => { this.countryData.push(item); }); VUE: <div v-for="country in countryData" @click="displayCountryInfo(country ...

Angular 13: Masking User Input with Reactive Form Controls

Looking to incorporate a phone number input field with formatting in a reactive form. The desired format is (123) 456-7890. For reference, check out this example link: https://stackblitz.com/edit/angular13-reactive-form-validation-y1qwmf?file=src/app/app. ...

Does a typescript module augmentation get exported by default when included in a component library?

Utilizing material-ui and Typescript, I developed a component library. By implementing Typescript module augmentation, I extended the theme options as outlined in their documentation on theme customization with Typescript. // createPalette.d.ts/* eslint-di ...

Exciting updates revealed upon new additions (angular)

I'm working with three components in my Angular application: app.component, post-create.component, and post-list.component. Let's take a look at the structure of these components: <app-header></app-header> <main> <app-post-c ...

What's the quickest method for duplicating an array?

What is the quickest method for duplicating an array? I wanted to create a game, but I found that Array.filter was performing too slowly, so I developed a new function: Array.prototype.removeIf = function(condition: Function): any[] { var copy: any[] ...

Making if-else statements easier

Greetings! I have a JSON data that looks like this: { "details": { "data1": { "monthToDate":1000, "firstLastMonth":"December", "firstLa ...

Executing asynchronous dispatch in TypeScript from a frontend component

Within this tutorial found at https://redux.js.org/advanced/exampleredditapi, specifically in the section housing containers/AsyncApp.js, you will notice a snippet of code like so: componentDidMount() { const { dispatch, selectedSubreddit } = this.props ...

Ways to Close a Modal in Ionic 5

I have a scenario where I need to open a modal, perform an asynchronous action, and then automatically dismiss the modal once the action is completed. Specifically, I want to use the fetchData function to handle the async task. @Component({ }) export cla ...

I'm puzzled as to why the banner text for my three images in the slider is only displaying on one of the images, all crammed together

Currently, I am working on an ecommerce project with Next.js. One of the challenges I faced was while setting up my banner page that includes a react-slick slider for images. Initially, when I added just one image, I noticed multiple renderings of it, but ...

Managing state in React using UseState along with an asynchronous API request

In my T3 app, I'm using TypeScript, React, Next.js, prisma, and tRPC. The header in my app displays the number of credits a user has. To fetch this data, I make an API call which can take some time to return a response. Since I use the credit amount a ...

issue with Angular: Unable to set both minimum and maximum values in the same input field for date type

I have been attempting to apply minimum and maximum values to an Angular code snippet, here is what I have: <input type="date" class="form-control" style="width: 30%" [disabled]="!dateSent" min="{{dateSent|date:&apo ...

Comprehending Angular 5's Importing External Classes

I have developed a class structure for managing Schedules. I then brought in this class to my primary program. My issue arises from the fact that this class utilizes the HttpClient, which I was instructed to set up within the constructor. As a result, when ...

Encountering difficulty importing TypeScript files dynamically within a Deno executable

When attempting to import a file from aws in an exe using its public link based on user input, I am facing difficulties For example, I generated my exe with the command below deno compile --allow-all main.ts Users execute this exe using commands like ./e ...