如何在打字稿中"fill in"泛型参数



假设我有一个像这样的通用typescript函数:

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

我有一个这样的具体接口:

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

我想重新导出doThing方法,以便它假设通用参数T始终是MyType。这样我就可以输入如下内容:

doThing({

…编辑器会自动完成xy成员,而不需要我事先指定T

我知道我可以这样做:

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

然而,这很麻烦而且容易出错。此外,doThing实际上比这个简化的示例中有更多的成员和变体,因此需要大量的复制粘贴。

有没有一种方法可以简单地"填写"?T,而不必复制粘贴整个原始定义?

从TypeScript 4.7开始,这个代码是允许的。

const foo: typeof doThing<MyType> = doThing

编辑:第(1)行也应该根据发行说明工作,但由于一个错误,额外的括号(2)从TypeScript 4.8开始需要。

const foo = doThing<MyType>    // (1) error
const foo = (doThing)<MyType>  // (2) ok

我想我们可以这样直接使用这个函数:

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

最新更新