有没有人知道在Typescript中是否有一种方法可以在转换时输出实例属性的名称?
例如,假设我有一个班级:
class SomeClass {
public someFn() { }
}
如何在创建SomeClass
的任何实例之前生成以下伪代码?
string str = nameof(SomeClass.someFn)
注意,这是为了重新分解,所以我不想在代码中循环遍历原型;我只是想知道是否有一种时间的方式来做这件事?换句话说,有没有办法让Typescript转换器将实例属性的名称作为字符串吐出?
为什么呢?我想要一种能够访问可重新分解安全的实例的已知属性的方法,并且 - 与someInstance.someFn
不同 - 不是在转换时确定的。因此,您可以使用switch
语句来访问不依赖于魔术字符串并且可以重构的不同属性。例如而不是在代码中编写以下内容:
switch(input){
case "someFn":
return someObj["someFn"]();
}
我可以写下以下内容:
switch(input){
case nameof(SomeClass.someFn):
return someObj[nameof(SomeClass.someFn]();
}
这个想法是someFn
变量的全局重命名将在switch语句中传播。
答案 0 :(得分:0)
我不确定你要做什么因为这个:
switch (input) {
case nameof(SomeClass.someFn):
return someObj[nameof(SomeClass.someFn]();
}
只有在input === "someFn"
时才能使用,并且您正在使用代码SomeClass.someFn
进行编写,因此您具体了解someFn
。
既然如此,则出现了什么问题:
switch (input) {
case "someFn":
return someObj["someFn"]();
}
如果您只想确保input
中的字符串是SomeClass
中的现有方法,那么您可以:
if (Object.keys(SomeClass.prototype).indexOf(input) >= 0 && typeof SomeClass.prototype[input] === "function") {
return someObj[input]();
}
答案 1 :(得分:0)
要获取没有任何魔术字符串的实例方法的名称,并且以可重构的方式,您可以使用以下内容:SomeClass.prototype.someFn.name
答案 2 :(得分:0)
我猜测有更好的方法,但没有用字符串引用方法,That section(记录“函数名称是someMethod”)
attach