Exporting a map of subtypes in Typescript allows for easy access to

I have a selection of classes structured like this:

abstract class A {}

class AB extends A {}
class AC extends A {}
class AD extends A {}

In one of my files, I need to create an export that maps class names to their constructors, for example:

export default {
  AB,
  AC,
  AD
};

What type should this export be?

I attempted the following:

type Mappings = {
  [typeName: string]: typeof A
};

However, when I use it like this:

import mappings from '..';

let s: string;
const TypeName = mappings[s];
const pr = new TypeName(); // ERROR

An error occurs stating:

Cannot create an instance of an abstract class
since A is an abstract class.

My goal is to understand how to replace typeof A with something like subtypeof A or any other suitable option.

Answer №1

When the typeof AbstractClass is utilized, the type that will be represented is the abstract class itself. This indicates that it will contain an abstract constructor that cannot be called upon. To tackle this issue, it is recommended to use a constructor signature instead. The constructor will generate an instance of the abstract class without being the abstract constructor present in the original abstract base class.

type Mappings = {
  [typeName: string]: new () => A
};

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

Proper Validation in Angular6: Preventing Empty Input Fields

I've been working with Angular and grappling with the challenge of validating input fields to prevent white spaces. I decided to experiment with an IF statement, as shown below. Everything seemed to be working smoothly until I encountered an error mes ...

Guide to creating numerous separate subscriptions in angular 6

Can you explain the differences between flatMap(), switchmap(), and pipe()? Which one would be most suitable for the given scenario? I need to call the next method once both responses are received. this.jobService.getEditableText('admins', compar ...

An error occurred when attempting to access data within a variable that is undefined, resulting in a TypeError at the errorHandler function

Every time I attempt to send a post, patch, or put request, I keep getting this error. However, there are no issues with get requests. TypeError: Cannot read properties of undefined (reading 'data') at errorHandler (/home/joe/Documents/mypro ...

Learn how to dynamically obtain AWS subnet and security group IDs using the serverless framework

I have been utilizing the Serverless Framework to deploy a Lambda function to AWS using Typescript. When connecting the Lambda to an existing VPC, it is necessary to specify the Subnet and Security Group IDs. Is there a method to obtain these values dynam ...

Retrieve the array from the response instead of the object

I need to retrieve specific items from my database and then display them in a table. Below is the SQL query I am using: public async getAliasesListByDomain(req: Request, res: Response): Promise<void> { const { domain } = req.params; const a ...

Mastering the art of chaining HTTP requests with RxJS for optimal results

I have a task that involves making multiple HTTP calls sequentially, examining the result of each call before proceeding to the next one. Depending on the response, I may need to display a message, continue to the next call, or break the chain. Additionall ...

I'm facing difficulty in assigning props because of the specific nature of generics in Typescript

My goal is to create a Higher Order Component (HOC) that can control a component which relies on certain props to function properly. To elaborate: I want to build a HOC that takes a component expecting props value and onChange, and modifies it so that the ...

Looking for a regular expression to verify if the URL inputted is valid in TypeScript

After conducting thorough research, I discovered that none of the suggested URLs met my criteria, prompting me to raise a new query. Here are my specific requirements: * The URL may or may not include 'http' or 'https' * The URL can co ...

Angular 2: Converting JSON data into an array

I am working with JSON data that contains vendor fields and I need to extract unique vendors into an array. Can someone provide guidance on how to achieve this in an Angular2 component? Here is the sample data: [{"category": "Living Room", "vendor": "Fle ...

Ensuring Input Validity in Angular4 and Symfony3

Currently, I am utilizing angular 4 and symfony3. In my application, there is a textarea that is required. However, when I only press enter (code 13) in this textarea without entering any other character, the form gets submitted. How can I prevent this spe ...

The error message "Property Routing does not exist on type 'typeof import'" indicates that the property "Routing

I have created a post but unfortunately, I haven't received any responses. Being new to leaflet, I am quite confused about what might be causing the issue. I followed all the instructions from the documents but I am still encountering errors. <lin ...

The specified object '[object Object]' is not compatible with NgFor, which only supports binding to iterable data types like Arrays

I have some code that is attempting to access objects within objects in a template. <table class="table table-striped"> <tr *ngFor="let response of response"> <td><b>ID</b><br>{{ response.us ...

Navigating with Angular's router occurs before the guard is fully completed

Within my Angular 8 application, the routing file is structured as below: const myRoutes: Routes = [ {path: '', component: FirstComponent , canActivate: [RegistrationSrcdGuard]}, {path: 'FirstComponent ', component: FirstCompon ...

Implementing Caching in Angular 5 Services

Searching for the best way to implement Angular services has led me here. The Service: const url = 'http://127.0.0.1:8000/api/brands/' @Injectable() export class BrandService { private brands:Observable<Array<Brand>>; constru ...

A guide on implementing TypeScript with React Native's platform-specific extensions

The issue at hand: In my react native project, I am using a custom hook that has platform-specific code. I need to import this hook based on the platform in use. When I import it as import useWifi from 'hooks/use-wifi.android';, everything works ...

In what way can I utilize const assertions to extract literal types from deeply nested objects?

Let's imagine I have a unique set of individuals: const group = { Alex: ['Ben', 'Chris'], Sarah: ['Dylan'], } as const; With the help of constant clarifications, I can define the specific types like so: type Parent = ...

The "npx prisma db seed" command encountered an issue: Exit code 1 error occurred during the execution of the command: ts-node --compiler-options {"module":"CommonJS"} prisma/seed.ts

this is a sample package.json file when I try to execute the command "npx prisma db seed", I encounter the following error: An error occurred while running the seed command: Error: Command failed with exit code 1: ts-node --compiler-options {&qu ...

Creating a custom utility type in TypeScript for serializing an array of objects: What you need to know

Imagine I have the following specified object: type Test = { date: Date num: number str: string } In this object, there is a Date type that needs to be converted into a string ("serialized"). To achieve this, I came up with the concept of a Generic ...

Declaring properties for an interface

I've recently started using Typescript and I'm facing a problem with some interface props. There is an error message that says "Property 'services' does not exist on type 'IntrinsicAttributes & AkkordionProps[]", I'm confu ...

The .map() operator requires a declaration or statement to be specified - TS1128 error

I've tried various solutions from different sources but none seem to be resolving the issue I'm facing. The problem is: when trying to run my app, I encounter the following error: 10% building modules 0/1 modules 1 active …\src\a ...