我有这样的功能
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)
但这是行不通的,我是不是在做傻事,以及如何解决这个问题。
非常感谢
答案 0 :(得分:1)
如果要在调用站点上指定T
和H
并推断其余的类型参数,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);
(我假设您的示例基于真实的代码,实际上是使用M
,I
和R
进行某些操作,否则可以将它们替换为{}
,object
和object
并没有此问题。)