Defining function parameter type in TypeScript based on another parameter

I'm currently working on a Chrome extension and I want to inject code into the page. However, I'm unsure how to achieve this without specifying fun: any and arg: any.

type funs = typeof getPageInfo | typeof setPercen;

async function injectScriptToPage<K extends funs>(fun: K, arg: Parameters<K>): Promise<dataPageU> {
    if (actTab.id === undefined) {
        console.log("vacio tab id");
        return;
    }
    const pr = await chrome.scripting.executeScript({
        target: {tabId: actTab.id},
        // files: ["./dist/injectScript.js"],
        func: fun, // <- Error here
        args: arg,
    });
    const x = pr?.[0]?.result as dataPageU;
    if (x === undefined) {
        console.log("vacio result");
        return;
    }
    if (!("titulo" in x) && !("currentTime" in x)) console.log("Err no es ni refresh ni once");
    return x;
}

Functions:

export function setPercen(l: StateVideoI[]): void
export function getPageInfo(once: boolean, YoT: "Y" | "T"): dataPage

The current code functions with 'any', however, my goal is to utilize types if possible.

Answer №1

Utilizing generics in functions within Typescript provides the flexibility to pass fewer arguments than specified in the generic signature. For example, defining type A <F extends (b: string)=> void allows passing ()=> void to F. It may be possible to forgo using type parameters altogether and opt for injectScriptToPage(fun: typeof getPageInfo | typeof setPercen, arg: Parameters | Parameters) instead.

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

Tips for integrating a variety of components onto a single webpage

Exploring the functionality of Angular, I am looking to include multiple components on a single page. How can this be achieved effectively in Angular? I envision each div representing a distinct component and view, with all components residing in separate ...

Tips for making the onChange event of the AntDesign Cascader component functional

Having an issue with utilizing the Cascader component from AntDesign and managing its values upon change. The error arises when attempting to assign an onChange function to the onChange property of the component. Referencing the code snippet extracted dire ...

What is the best way to receive the result of an asynchronous function as an input and showcase it using express?

I have recently started learning about node and express My goal is to create an API that can fetch data from an external source and use that data for my application Is there a way to retrieve the result of an asynchronous method and display it using the ...

Using Typescript, instances of a class can access its members from within methods without needing

Having recently dipped my toes into the world of Node and TypeScript, I was taken aback to discover that you need to explicitly specify this in order to access class members when working with classes. Take for example this code snippet: class MyClass { p ...

Creating numerous bar graphs for each specific date

I have a dataset containing dates and corresponding information for each element. Despite trying various approaches, I am unable to create a barchart. Every solution I've attempted has been unsuccessful thus far. The dataset is structured as follows ...

How can we access child components in vanilla JavaScript without using ng2's @ViewChild or @ContentChild decorators?

Recently, I delved into the world of using ViewChildren and ContentChildren in Angular 2. It got me thinking - can these be implemented in ES6 without TypeScript annotations? The TypeScript syntax, according to the official documentation, looks something ...

What could be causing the empty object return from the Async function in my Typescript code on Next JS?

Encountering issues with an async function. In the ../lib folder, I have a class for handling data from an API website. However, when attempting to load the API data within an async function, I encounter difficulties. The async function does not return a ...

Load various information retrieved from an HTTP API into a SQLite database

I am currently working on an Ionic2 project that requires users to log in before gaining access to the system. Once the login is successful, I need to post their username to another API to retrieve a list of all entries made by them. The challenge I am fac ...

What is the best way to create a new array from scratch while utilizing a typescript alias?

When declaring a type alias, I encountered an issue where I could not initialize it without creating an item: type ModelState = [string, string[]]; const modelState: ModelState = [null,[]]; modelState["firstName"] = ["First name is required."]; If I try ...

Classifying Union Types based on their distinct characteristics

There is a specific type with its own unique property (method) type Functions = { method: "connect", request: number, response: number, } | { method: "remove", request: string, response: string, } I aim to create a function that can handle inp ...

Styling array of arrays

When retrieving data from an API, the structure looks like this: "key1" : { "subkey1" : value "subkey2" : value "subkey3" : value } "key2" : { &q ...

What is the process for assigning a custom React component as the Type for a prop in another component?

Currently, I am working on a customized GenericModal component and would like to include an array of my ModalText components as props in the GenericModal for display purposes. I want to specifically define the type of prop being passed, rather than using s ...

The property 'options' is not found in the type of union type

In my development project, I have defined a couple of interface types and a union type: export interface FieldOptions { value: string | number; viewValue: string; } export interface BaseField { id: string; derived?: boolean; required?: boolean; ...

Struggling to center a MatIcon within a MatButtonToggle component in an Angular project

I've been struggling to center the MatIcon in the MatButtonToggle, trying multiple methods without success. It may seem like a minor issue, but it's causing quite a bit of trouble for me. Can someone please guide me on how to make this adjustment ...

Unable to showcase the content inside the input box

I am having trouble displaying a default value in an input field. Here is how I attempted to do it: <input matInput formControlName="name" value="Ray"> Unfortunately, the value is not appearing as expected. You can view my code o ...

Competing in a fast-paced race with JavaScript promises to guarantee the completion of all

How can I retrieve the result of a Javascript Promise that resolves the fastest, while still allowing the other promises to continue running even after one has been resolved? See example below. // The 3 promises in question const fetchFromGoogle: Promise&l ...

In my coding project using Angular and Typescript, I am currently faced with the task of searching for a particular value within

I am facing an issue where I need to locate a value within an array of arrays, but the .find method is returning undefined. import { Component, OnInit } from '@angular/core'; import * as XLSX from 'xlsx'; import { ExcelSheetsService } f ...

Increasing the token size in the Metaplex Auction House CLI for selling items

Utilizing the Metaplex Auction House CLI (ah-cli) latest version (commit 472973f2437ecd9cd0e730254ecdbd1e8fbbd953 from May 27 12:54:11 2022) has posed a limitation where it only allows the use of --token-size 1 and does not permit the creation of auction s ...

Why is it that the component passed in props fails to function properly when invoked as a function? React is signaling a shift in the order of Hooks being called

Here is a simple example I've prepared to illustrate how I am passing a component and then calling it like a function, as well as another example where it works just by calling it normally. You can switch between the working and not working examples b ...

Verifying if an object in TypeScript contains a property with a value of true

I need to verify if the object below contains the property forums and if its value is set to true. {forums: true, pages: true, photos: true, videos: true} Currently, I am working with TypeScript Angular 5. The code snippet below accomplishes this task e ...