Typescript 类型脚本:我可以引用类型变量的类型变量吗?
我有两种通用类型-Typescript 类型脚本:我可以引用类型变量的类型变量吗?,typescript,generics,Typescript,Generics,我有两种通用类型-Client和MockClient。我想描述第三种泛型类型-Mocked,它应该是MockClient的专门化,对应于Client的给定专门化。例如: type PersonClient = Client<Person>; // the following two types should be equivalent type MockPersonClient = Mocked<PersonClient>; type MockPersonClient
Client
和MockClient
。我想描述第三种泛型类型-Mocked
,它应该是MockClient
的专门化,对应于Client
的给定专门化。例如:
type PersonClient = Client<Person>;
// the following two types should be equivalent
type MockPersonClient = Mocked<PersonClient>;
type MockPersonClient = MockClient<Person>;
类型PersonClient=Client;
//以下两种类型应等效
类型MockPersonClient=Mocked;
输入MockPersonClient=MockClient;
换句话说,我想声明一个类型,如:
type Mocked<C extends Client<T>> = MockClient<T>;
type Mocked=MockClient;
是否可以在Typescript中执行此操作?如果没有,是否有相关建议(我不知道该功能将如何命名),或者我所描述的内容定义不清,或者很难在类型系统中实现?我认为您想要的内容定义得相当好,但目前在TypeScript中还不可用(从v2.5开始)。一个能让你达到目的的功能是或更通用。我不确定这些功能什么时候(如果有的话)会进入TypeScript 有一些变通办法。我使用的一个方法,您从我的评论中了解到,是使用类型为
T
的多余/幻影属性来扩充您的客户机
类型。假设Client
是一个类,您可以执行以下操作:
class Client<T> {
// phantom property
_clientType: T = void 0 as any;
// rest of class definition
}
type Mocked<C extends Client<{}>> = MockClient<C['_clientType']>
类客户端{
//幻影属性
_clientType:T=void 0,如有;
//类的其余部分定义
}
类型Mocked=MockClient
是的,它必须是公共属性,但您可以给它一个名称,表明它是供内部使用的(前导下划线)。在运行时,它只是未定义的,Client
的用户不需要注意它。(如果Client
是一个要从对象文本创建实例的接口,则会有点复杂,因为TypeScript会抱怨没有\u clientType
属性。)
这取决于你是否值得对你的班级这么做。其他人可能会有不同的解决办法。祝你好运 您能为
客户机添加定义吗?如果您可以从某些(可能是嵌套的)属性中获得T
值,那么您想要的是可能的。Client
只是一个示例-我正在处理的实际类型相当复杂;但我想我知道你的意思。如果typeclient={obj:T}
那么我可以使用typemocked=MockClient
(我没有想到这个!)。然而,我的类型不是这样的-我只能通过方法调用来获取T
。有没有一种方法可以表示索引类型的返回值?看来我也不能通过宣布一个多余的私有财产来“欺骗”,只有当它是公共财产时,它才对我有效。