假设我有一个像这样的通用typescript函数:
function doThing<T>(param: T): T {
//...
}
我有一个这样的具体接口:
interface MyType {
x: string;
y: number;
}
我想重新导出doThing
方法,以便它假设通用参数T
始终是MyType
。这样我就可以输入如下内容:
doThing({
…编辑器会自动完成x
和y
成员,而不需要我事先指定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});