Typescript 泛型类使用类型作为值,或传递属性作为索引类型的索引
我有一节这样的课Typescript 泛型类使用类型作为值,或传递属性作为索引类型的索引,typescript,generics,typescript-generics,mapped-types,Typescript,Generics,Typescript Generics,Mapped Types,我有一节这样的课 接口事件{ 就绪:[日期]; 开始:[]; 停止:[]; } 导出抽象类事件{ 公共摘要只读名:name; 公共函数(参数:事件[名称]){ callSomeFunction(this.name,args); } } 我在问是否可以通过某种方式删除泛型类型或name属性来避免代码中的重复?好的,我找到了一些有效的方法: 导出抽象类事件{ 公共摘要只读名称:keyof事件; 公共函数(args:Events[this['name']]{ callSomeFunction(thi
接口事件{
就绪:[日期];
开始:[];
停止:[];
}
导出抽象类事件{
公共摘要只读名:name;
公共函数(参数:事件[名称]){
callSomeFunction(this.name,args);
}
}
我在问是否可以通过某种方式删除泛型类型或
name
属性来避免代码中的重复?好的,我找到了一些有效的方法:
导出抽象类事件{
公共摘要只读名称:keyof事件;
公共函数(args:Events[this['name']]{
callSomeFunction(this.name,args);
}
}
所以我可以这样做:
class ReadyEvent扩展事件{
name='ready';
}
如果不重复多次
'ready'
^^您能明确指出重复或问题所在吗?我的意思是,我知道name
和name
在您的代码中出现过多次,但每种用法都有不同的含义,因此我很难想象有更简洁的用法。这就像问我是否可以删除箭头函数x=>x+2
中x
的一个实例。我的意思是,它们都有相同的类型,如果我们创建一个扩展的类,我们将执行class extends Event
例如,但是我们还必须将name
值设置为'ready'
,我能不能把Name
转换成一个值,因为它总是一个字符串?所以class ReadyEvent扩展事件{readonly Name=“ready”;}
对你来说重复太多了?您可以重构为类似于类ReadyEvent extensed SubEvent(“ready”){}
的东西,以获得子事件的适当定义,例如,但对于您的用例来说,这可能值得,也可能不值得。这就是你要找的吗?如果没有,你能详细说明一下吗?哦,那很聪明,谢谢!哦,当然。。。多态这是一种方法。您可能希望在这里展示子类化是如何工作的(例如,类ReadyEvent扩展事件{readonly name=“ready”}
)。