如何在类型脚本中制作不同的泛型函数?

时间:2018-11-01 11:46:37

标签: typescript

我有这样的功能

export const registerResource = <T, H, M, I extends object, R extends object>(serverConfig: IResourceServerConfig<T, H>, option: IRegisterResourceOption<T, H, M, I, R> = {}) => {
...
}

所以我会这样称呼

registerResource(foo,bar)

但是我只想这样定义2种类型的T&H

registerResource<any, number>(foo,bar)

但这是行不通的,我是不是在做傻事,以及如何解决这个问题。

非常感谢

1 个答案:

答案 0 :(得分:1)

如果要在调用站点上指定TH并推断其余的类型参数,TypeScript当前不支持该功能,但希望很快就可以;请参阅open suggestion。当前的解决方法是将您的函数更改为带有某些类型参数的函数,该函数返回具有其余类型参数的函数:

export const registerResource = <T, H>(serverConfig: IResourceServerConfig<T, H>) =>
  <M, I extends object, R extends object>(option: IRegisterResourceOption<T, H, M, I, R> = {}) => {
  // ...
};
registerResource<any, number>(foo)(bar);

(我假设您的示例基于真实的代码,实际上是使用MIR进行某些操作,否则可以将它们替换为{}objectobject并没有此问题。)