How to "fill in" generic parameter in typescript

Viewed 204

Let's say I have a generic typescript function like this:

function doThing<T>(param: T): T {
    //...
}

And I have a concrete interface like this:

interface MyType {
    x: string;
    y: number;
}

I want to re-export doThing method so that it assumes generic parameter T is always MyType. The reason is so that I can type something like:

doThing({

...and editor will auto-complete members x and y without me having to specify T in advance.

I know I can do something like:

import {doThing as _doThing} from 'some-module';
export const doThing = _doThing as (param: MyType) => MyType;

However, this is cumbersome and error prone. Also, doThing actually has a lot more members and variants than in this simplified example, so it would take a lot of copy-pasting.

Is there a way to simply "fill in" T, without having to copy-paste the entire original definition?

2 Answers

I suppose we can directly use this function like this:

let res = doThing<MyType>({x: "something", y: 0});

The code below is allowed since TypeScript 4.7.

const foo: typeof doThing<MyType> = doThing
Related