Is it possible to utilize varying parameter types within a function in JavaScript?

With the limitation of not being able to overload functions in JS, my attempt to pass different types has failed:

  static fromRaw(raw: CourseRaw | CourseNameSearchRaw): Course | CourseNameSearch {
    if (raw instanceof CourseRaw) {
      return {
        ...raw,
        metaInfo: MetaInfoFactory.fromRaw(raw.metaInfo),
        // terrain: TagFactory.fromRaw(courseRaw.terrain),
        ratingInfo: RatingFactory.fromRaw(raw.ratingInfo),
        images: ImageFactory.fromRaw(raw.images)
      };
    }
  }

--> 'CourseRaw' only refers to a type, but is being used as a value here.ts(2693)

Both CourseRaw and CourseNameSearchRaw are interfaces with distinct object structures:

export interface CourseNameSearchRaw {
  trackId: number;
  typeCode: number;
  trackName: string;
}

My approach was to handle each type differently and return the respective type.

Answer №1

When it comes to defining functions, my preference is always Named parameters in similar cases. This approach requires specifying a Key every time you call the function, instead of a single value.

For example:

const func = ({ key1, key2, key3 = “defaultValue3” }) => {
    if (key1) {}
    if(key2) {} 
    ....etc
}

You can also create an interface with types for each key. I hope this solution proves helpful for you! :)

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

What is the best way to transfer variables to a different page through a pop-up window?

I'm working with a function that converts the Id of the clicked element into a variable, then opens a new window with a different page. How can I access or utilize this variable on the newly opened page? var idToWrite = []; $(function(){ $(".szl ...

JavaScript - Unable to unselect a button without triggering a page refresh

I have a series of buttons in a row that I can select individually. However, I only want to be able to choose one button at a time. Every time I deselect the previously selected button, it causes the page to reload when all I really want is for all the but ...

Caution: Potential Unresolved Promise Rejection Detected (ID: 21) - Error: Undefined is not a valid object when trying to evaluate 'res.json'

ERROR Getting an Unhandled Promise Rejection (id: 21): TypeError: undefined is not an object (evaluating 'res.json'). Any suggestions on fixing this issue in my code? I've checked the logs for user and loggeduserobj, and they seem to be cor ...

The function string.charAt() is returning a value of 0

I'm attempting to output each letter of a word separately by using the variable string. Here is the code I have so far: function typewriter() { var el = document.getElementById("typewr"); var string = "Hello"; for(var i=0;i<string.le ...

The module 'tcp' is missing in Node.js and cannot be located

The node application crashes unexpectedly at the specified line of code: var tcp = require('tcp'), An error message is displayed: node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: C ...

The function signature '({ articles }: Props) => JSX.Element' does not match the type 'NextPage<{}, {}>'

Recently, I've decided to delve into the world of React.js and Next.js after being familiar with Vue.js. Encountering a peculiar typescript error has left me scratching my head, but surprisingly, the code actually compiles despite Visual Studio Code w ...

Caution: An invalid next.config.js file has been detected while running the Next.js project

Whenever I try to run my project, I encounter the following three warnings: 1- warn - We found some invalid options in your next.config.js file. The property webpack5 is not recognized and may cause issues (allowed properties are: amp, analyticsId, assetP ...

What makes this effective in JavaScript?

While working on a project, I encountered the task of comparing coordinates in two arrays at the same index to see if they are identical. There are various methods to achieve this, but one particular approach piqued my interest. Why does it yield the expec ...

The scenario of two users simultaneously gaining control access in socket.io creating a race condition

There is a need to ensure that only one user at a time is notified for an available room. I am implementing a solution to prevent multiple users from being notified simultaneously for the same room. socket.on('Check', function (room) { io.in(r ...

Deregister channel listener

My application has a functionality where users can subscribe to Twilio chat channels. When a user clicks on a channel, the chat opens up, messages are loaded, and the user is subscribed to receive new messages using this.state.channel.on('messageAdded ...

"Every time you use Firebase storage, you can expect a

I am facing an issue with my Vue 3 application. I am trying to retrieve a link to a document from the repository, but all I keep getting is a promise instead of the actual link. Can someone help me understand why this is happening? async FetchData({ state, ...

What parameters should I include in an Ajax request to upload a file using SFTP in a JS + PHP setup?

I need the user to input a PDF or image file on my page, which will then be uploaded via SFTP using PHPSECLIB. Additionally, I want to transmit the file along with some additional data via ajax. var file = this.files[0]; alert('You ha ...

Is there a way to make a NodeJS Transform stream produce multiple records for each input chunk?

Currently, I am working on a Transform stream that has the capability to receive an incoming stream of XML data and then emit a subset of that in the form of JavaScript objects. <item> <name>some name</name> <files> <fil ...

Passing information from Vue to a modal

I'm working with 3 components: TaskList, TaskItem, and TaskForm. Within the TaskList component, there is a loop that renders all the data in TaskItem. Each TaskItem has an edit button meant to open a TaskForm modal (using bootstrap) displaying the sp ...

HTML Elements for Displaying Undefined JSON Information

Hey there, I'm new to programming and I'm looking to display JSON data in an HTML table using jQuery. The issue I'm facing is that the output from the server shows up as 'undefined'. My goal is to have a constantly updated list of ...

Merge the values of two select tags into a single textbox

There are two select Tags along with a text box included. <select name="select1"> <option>1</option> <option>2</option> </select> <select name="select2"> <option>1</option> <option>2 ...

Angular is sending a parameter with a null value, which is not supposed to happen

My filtering system used to work well with a code that displayed items of specific status. However, I had to modify it to match a select input requirement. <ul id="dropdown-basic" *dropdownMenu class="dropdown-menu" role="menu" aria-labelledby="button- ...

Can the execution of setTimeout() impact the overall performance?

Is it possible that this code will cause the client to slow down due to the extended timeout? //and let's revisit this after some time setTimeout(function() { updateWeather(lat,lng); }, 60000); ...

Disable page scrolling while enabling scrolling for specific elements with overflow using JQM

Is there a way to stop the page from scrolling on a jQuery Mobile page while still allowing a specific element with overflow set to scroll to be scrolled by the user? The challenge is that the length of the page may vary slightly, exceeding 100% on differe ...

Malfunctioning string error in Django view caused by boolean inconsistencies

Looking to extract variables from a post request made by Javascript. Upon inspecting the received variables in my view, I found the following: >>> print request.body {"p":"testprd","cash":false,"cheque":true,"debit":false,"credit":true} The valu ...