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”}
)。