可以通过以下几种方式实现:
Reflect.ownKeys()
方法获取类的所有成员,然后通过判断成员类型为函数来获取方法名。例如:class MyClass {
method1() {
// ...
}
method2() {
// ...
}
}
const myClass = new MyClass();
const methodNames = Reflect.ownKeys(Object.getPrototypeOf(myClass))
.filter(key => typeof myClass[key] === 'function');
console.log(methodNames); // ['method1', 'method2']
function methodName(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.value.methodName = propertyKey;
}
class MyClass {
@methodName
method1() {
// ...
}
@methodName
method2() {
// ...
}
}
const myClass = new MyClass();
const methodNames = Object.getOwnPropertyNames(Object.getPrototypeOf(myClass))
.filter(key => typeof myClass[key] === 'function')
.map(key => myClass[key].methodName);
console.log(methodNames); // ['method1', 'method2']
Reflect.getMetadata()
方法可以获取类或方法上的元数据,从而获取方法名。例如:import 'reflect-metadata';
class MyClass {
method1() {
// ...
}
method2() {
// ...
}
}
Reflect.defineMetadata('methodName', 'method1', MyClass.prototype, 'method1');
Reflect.defineMetadata('methodName', 'method2', MyClass.prototype, 'method2');
const myClass = new MyClass();
const methodNames = Object.getOwnPropertyNames(Object.getPrototypeOf(myClass))
.filter(key => typeof myClass[key] === 'function')
.map(key => Reflect.getMetadata('methodName', myClass, key));
console.log(methodNames); // ['method1', 'method2']
以上是获取TypeScript类中方法名的几种方法,可以根据具体需求选择适合的方式。腾讯云提供的相关产品和服务可以参考腾讯云官方文档:腾讯云产品与服务。
领取专属 10元无门槛券
手把手带您无忧上云