Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript如何更改方法定义?_Typescript_Typescript2.0 - Fatal编程技术网

Typescript如何更改方法定义?

Typescript如何更改方法定义?,typescript,typescript2.0,Typescript,Typescript2.0,打字脚本版本:“^2.9.2” 这是我的密码 定义新接口的方法: interface TestRoute<R,F>{ to(r:R):F; defaultRoute:F; } 如何优雅地定义global.UserRpc.connector.authRemoter接口,从而不需要为每个方法调用TestRoute 谢谢。如果您有一个要包括的方法名列表,您可以使用它来迭代它们,并以您想要的方式转换值: type TestRoutify<T, K extends ke

打字脚本版本:
“^2.9.2”

这是我的密码

定义新接口的方法:

interface TestRoute<R,F>{
    to(r:R):F;
    defaultRoute:F;
}
如何优雅地定义
global.UserRpc.connector.authRemoter
接口,从而不需要为每个方法调用
TestRoute


谢谢。

如果您有一个要包括的方法名列表,您可以使用它来迭代它们,并以您想要的方式转换值:

type TestRoutify<T, K extends keyof T> = 
  {[P in K]: TestRoute<FrontendSession, T[K]>}

interface UserRpc {
  connector: {
    authRemoter: TestRoutify<AuthRemoter, 'auth'|'updateNickName'>
  }
} 
因此,
FunctionKeys
将与
RemoteAbstract
中的任何额外方法名称一起计算为
'auth'|'updateNickName'
。如果
RemoteAbstract
没有任何额外的方法,或者您不介意包含它们:

type TestRoutifyMethods<T> = TestRoutify<T, FunctionKeys<T>>;

interface UserRpc {
  connector: {
    authRemoter: TestRoutifyMethods<AuthRemoter>
  }
} 
类型TestRoutifMethods=TestRoutify;
接口用户RPC{
连接器:{
authRemoter:TestRoutificationMethods
}
} 
如果最终引入了您不想要的方法,那么您可以尝试使用更好地表示选择条件的条件类型,或者放弃并手动指定键,就像上面的第一个解决方案一样


希望有帮助。祝你好运

谢谢你的回答。这两种方法都很有效。
type TestRoutify<T, K extends keyof T> = 
  {[P in K]: TestRoute<FrontendSession, T[K]>}

interface UserRpc {
  connector: {
    authRemoter: TestRoutify<AuthRemoter, 'auth'|'updateNickName'>
  }
} 
type FunctionKeys<T> = 
  {[K in keyof T]: T[K] extends Function ? K : never}[keyof T]
type TestRoutifyMethods<T> = TestRoutify<T, FunctionKeys<T>>;

interface UserRpc {
  connector: {
    authRemoter: TestRoutifyMethods<AuthRemoter>
  }
}