Circumvent TypeScript constructor definition

I have a TypeScript class representing a JavaScript class, but the TypeScript declaration is missing the constructor parameters that are present in the JavaScript class. Is there a way to work around this limitation in TypeScript and still create an object by passing in the necessary parameters?

This scenario arises because I need to create special test mock-ups by bypassing restrictions in a library. I am open to any creative solutions or hacks.


Below is the JavaScript class hidden within a third-party library:

class InnerClass {
    constructor(param1, param2, param3) {
    }
}

And here is the TypeScript declaration exposed by the library:

class InnerClass {
    // no constructor
}

The goal is to achieve something like this:

const a: InnerClass = new InnerClass(param1, param2, param3);

In essence, creating an object of the right TypeScript type with the correct constructor parameters, despite the limitations imposed by the TypeScript declaration. Is such workaround possible in TypeScript?

Answer №1

There is always an escape route by utilizing the any command.

Check out this swift resolution:

const a: InnerClass = new (InnerClass as any)(param1, param2, param3);

The utilization of the any declaration allows developers to have complete flexibility with this variable in Typescript.

The optimal method would be to modify their declaration file accordingly, or replicate it for your project and utilize that version instead of theirs.

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

NestJS API experiencing issues connecting to MongoDB due to empty index keys

My goal is to create an API with NestJS using TypeORM. Initially, I had set up the API to work with Postgres, but now I need to migrate it to MongoDB. After making the necessary changes, the connection is established successfully. However, I encounter an ...

What causes TypeScript to automatically infer a default property when dynamically importing a JavaScript file that lacks a default export?

While dynamically importing a javascript file that exports multiple functions (without a default export), I encountered this issue: const sayHi = import('./sayHi.js') I was expecting the type of sayHi to be Promise<{name1: function, name2: fu ...

"Utilizing Postgresql with TypeORM for filtering many-to-many relationships

I have two entities that are connected with a ManyToMany relationship: // Branch entity @ManyToMany( (type) => User, (e) => e.branches ) users: User[]; // User entity @ManyToMany( (type) => Branch, (e) ...

Automatically deducing types from object keys in Typescript is a convenient feature

I'm looking to define an interface for a Select component that allows for selecting single or multiple items. interface MySelect<T extends boolean> { multi: T, // Indicates if it's a multiple item select onChange: (item: T extends t ...

Transform the subscription into a string

When I use the http method to retrieve a single user, the output logged in the console looks like this: this.usersService.getOneUser().subscribe(data => { console.log(data) }); email: "<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data- ...

Exploring the differences between Angular's @Input and @Output directives and utilizing Injectable Services

When considering the differences between @Input/@Output in parent and child components versus using services that are instantiated only once with dependency injection (@Injectable()), I find myself questioning whether there are any distinctions beyond the ...

Generating an array of elements from a massive disorganized object

I am facing a challenge in TypeScript where I need to convert poorly formatted data from an API into an array of objects. The data is currently structured as one large object, which poses a problem. Here is a snippet of the data: Your data here... The go ...

Ways to access file attributes and transfer a file in ionic 4?

I am facing an issue while attempting to transfer a file from my mobile device to Google bucket using Ionic 4. Although I can successfully upload the file, I am struggling to extract its properties from the file object. Below is the method I am using: as ...

What is the best way to incorporate an image into the canvas element and then use it as a drawing surface?

I have been searching for solutions on various platforms, but I'm having trouble finding ones that work specifically with Ionic and Angular. One major issue I'm facing is trying to copy an image to the canvas. No matter what I try, I can't ...

Troubleshooting the ineffectiveness of RegExp object in finding and replacing

I have been attempting to substitute values in a string template using the following method: for (var i in replacements) { var regexp = new RegExp('\$\{' + i + '\}', 'g'); template = template.replace(re ...

defineProps withDefaults "The type is lacking the following properties from the specified type"

I am currently working on a custom Button component with some unique functionality: <script lang="ts" setup> import { computed, ref } from 'vue'; const { type = 'button', color = 'primary', disabled = fa ...

How can I verify the "Type" of user input in a custom React TypeScript hook?

Creating a customized hook to fetch JSON data from an API is a task I am currently working on. The challenge is that I intend to use this hook for various types of data, so I need a mechanism to specify the type each time I utilize the hook. Depending on t ...

Unit test for PrimeNg Multiselect is not passing

While conducting unit tests for my component that includes various primeng components, I encountered an issue with the multi select component. All unit test cases are passing successfully except for the multi select which is returning the error message bel ...

Encountering issues with accessing a variable before its initialization in the getServerSideProps function in

Currently, I am working on setting up Firebase and configuring the APIs and functions to retrieve necessary data in my firebase.tsx file. Afterwards, I import them into my pages/index.tsx file but I am encountering an issue where I cannot access exports af ...

Developing the headers for a service using React.js

As someone new to ReactJs, I'm curious about the various methods we can use to include Headers in our service Url before making a call. While I'm familiar with how GET/POST Calls are made in angular Js after including headers, I'd like to l ...

Angular Unordered Query Exploration

I'm currently working on implementing a search feature in my code where I want to filter elements of a list based on user input. The filtering works well if I search for the elements in a specific order. For example, if I search for 'red blue yel ...

acquiring the main class instance within a function without relying on an arrow function

Within my Angular project, I have integrated a datatable with row grouping and row callbacks. Datatable Options openPositionDatatableOptions = { sDom: 'rt<"bottom"p>', ajax: (data, callback, settings) => { this.service.ge ...

The payload from the Axios POST request is failing to reach its destination endpoint

I have two Express servers up and running - a gateway and an authentication service. I am facing an issue where the payload I set in the body of a request from my gateway to the authentication server never seems to arrive, despite there being no apparent C ...

Best practice for spreading computed values in Angular 2

I am struggling to make computed values work with @Input properties. Unfortunately, the initial value propagation is not functioning correctly. https://plnkr.co/edit/1MMpOYOKIouwnNc3uIuy I have two components: App (the root component with a template-dri ...

What is the best way to enforce input requirements in Typescript?

I am currently facing an issue with two required inputs that need to be filled in order to enable the "Add" button functionality. I have considered using *ngIf to control the visibility of the button based on input values, but it seems to not be working. ...