Finding the type of function within a closure

I've been searching extensively without luck in finding a solution to this specific issue I'm facing. Any assistance would be greatly appreciated.

Currently, I am implementing closures for simple dependency injection and attempting to avoid functions being passed with the "any" type.

Let's consider the following scenario:

// db-fns.ts

export const makeQuerySql = ({pool: SqlPool}) => 
    <T>(query: string, args?: any): Promise<T> => {
       // function code
    }

// user-fns.ts

export const makeGetUser = ({querySql}: Dependencies) => (userId: number) => {
   // function code
}
export interface Dependencies {
  querySql: ????
}

// index.ts

import {makeQuerySql} from 'db-fns.ts';
import {makeGetUser} from 'user-fns.ts';
const querySql = makeQuerySql({pool});
const getUser = makeGetUser({querySql});

I'm struggling to determine how to define the typeof querySql within the dependencies interface in user-fns.ts

Answer №1

It has been stated that makeQuerySql should return a function of the form

<T>(query: string, args?: any) => Promise<T>
. By defining it in this interface:

export interface Dependencies {
  querySql: <T>(query: string, args?: any) => Promise<T>
}

The code in index.ts will then pass type checking.

However, there appears to be some skepticism regarding whether makeQuerySql actually generates the specified

<T>(query: string, args?: any) => Promise<T>
function. This would imply a function that returns a Promise<T> for any type value of
T</code, even though neither of the function's parameters are related to the type <code>T
. How is this achieved?

In addition, it is important to define a type for the SqlPool variable in the makeQuerySql call to avoid implicit typing as any. An example solution could be:

({ pool: SqlPool }: { pool: TypeOfSqlPool }) =>
  <T>(query: string, args?: any): Promise<T>

Replace TypeOfSqlPool with the desired type for the SqlPool variable.

Hopefully, this information proves useful. Best of luck!

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 are the steps to successfully upload a nestjs application (using typescript) onto the heroku

After creating a nestjs app, I am now seeking the most efficient way to deploy it on Heroku for production environment. Upon attempting to deploy the code generated by nest-cli as-is, I received the following logs from Heroku: 2018-12-28T08:37:23.881261+ ...

Setting up Datatable in Angular 2+ without relying on jQuery

I need assistance with initializing a datatable for a table that has a unique id. Can you provide guidance on the syntax to achieve this? Here is an example of my table structure: <table id="myDataTable"> <thead> <tr> ...

Guide on sending files and data simultaneously from Angular to .NET Core

I'm currently working on an Angular 9 application and I am trying to incorporate a file upload feature. The user needs to input title, description, and upload only one file in .zip format. Upon clicking Submit, I intend to send the form data along wit ...

Angular: Refresh mat-table with updated data array after applying filter

I have implemented a filter function in my Angular project to display only specific data in a mat-table based on the filter criteria. Within my mat-table, I am providing an array of objects to populate the table. The filtering function I have created loo ...

Is the child constantly updating due to a function call?

Having difficulty navigating the intricacies where a child keeps re-rendering due to passing a function from the parent, which in turn references an editor's value in draftjs. function Parent() { const [doSomethingValue, setDoSomethingValue] = Re ...

Angular 2: Sending an HTTP GET request with custom headers and parameters

I have been encountering difficulties while attempting to retrieve data from a Stardog triple store into Angular. Despite successfully accessing the service using curl with matching headers and parameters, I am unable to replicate this functionality with ...

Retrieving an element by its id in Angular 2

Hi there, I'm having some trouble with a code snippet: document.getElementById('loginInput').value = '123'; When trying to compile the code, I keep getting this error message: "Property value does not exist on type HTMLElement ...

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 ...

What is the functionality of ngModel in the Angular Heroes Tour tutorial?

Hello everyone, this is my first post here. I have been diving into the Angular Tour of Heroes using Angular 6 and I think I understand how ngModel works, but there's one thing that puzzles me. How does it manage to update the data in my list when th ...

Issue TS7053 occurs when trying to access any index of the target of a React.FormEvent<HTMLFormElement>

I've been working on adapting this tutorial to React and TypeScript. Here is the code snippet I have implemented for handling the onSubmit event: const handleSignUp = (event: React.FormEvent<HTMLFormElement>) => { event.preventDefault(); ...

Executing Child Validators when moving to the next step in an Angular MatStepper from the Parent Component

I am looking to implement validation for my Mat-Stepper-Next function in the App Component using child component validators. I have 3 different form components, each with its own form group, validations, and next button within the component. I am includi ...

Tips for handling changing form information with useState?

I am faced with a dilemma - I have a dynamic form with potentially hundreds of input fields, making it impractical to create a state for each one individually. My plan is to use an object with the unique key of each form field, but I could use some guidanc ...

Converting constants into JavaScript code

I've been diving into typescript recently and came across a simple code snippet that defines a constant variable and logs it to the console. const versionNuber : number = 1.3; console.log(versionNuber); Upon running the tsc command on the file, I no ...

Retrieve server information without utilizing data.map since array.map is not a supported function in next.js version 13

Currently, I am developing a list page using next.js 13 to display a collection of projects. I made an attempt to enable server-side rendering for this feature. The implementation is located in app/team/page.tsx import { useRouter } from 'next/navig ...

Error 404 encountered while attempting to load bootstrap-italia

Currently seeking assistance with loading a CSS file for bootstrap-italia. After installing bootstrap-italia, I attempt to run the server using the command: ng build --watch --base-href /home/ Upon successfully installing bootstrap-italia, located in my n ...

Retrieve an Array Containing a Mix of Objects and Functions in Typescript

Let's address the issue at hand: I spent several months working with a custom React Hook using plain JavaScript, and here is the code: import { useState } from 'react'; const useForm = (initialValues) => { const [state, setState] = ...

A simple way to automatically fill an input field with a mask when clicking in Angular 2

When a user clicks on this span, the following action is triggered: <span data-content="15" #Fast15 (click)="enterFastTime(Fast15)" class="quick-time">15mins</span> Users can also manually input a date in the following input field. If they ...

Enforcing Null Checks on Iterables in TypeScript

Encountering a potential issue with strictNullChecks in TypeScript (v. 3.2.1): interface IData { data?: { payload: string }; } const list: IData[] = []; const index: number = 0; //testing a if (list[index].data) list[index].data.payload = "a"; / ...

Uncovering the value of a Nested JSON object in a JSON file with Typescript

As a beginner in Typescript, I am currently working on parsing a nested JSON file containing segments and products. My goal is to extract the value of the product and display it on the console. Here is the structure of the JSON File : { "int" ...

The Angular custom modal service is malfunctioning as the component is not getting the necessary updates

As I develop a service in Angular to display components inside a modal, I have encountered an issue. After injecting the component content into the modal and adding it to the page's HTML, the functionality within the component seems to be affected. F ...