EdwardZZZ / articles

工作点滴记录
2 stars 0 forks source link

修饰器获取class 参数名 #56

Open EdwardZZZ opened 5 years ago

EdwardZZZ commented 5 years ago
function Binder(): Function {
    return function <T extends { new(...args: any[]): {} }>(constructor: T) {
        return class extends constructor {
            constructor(...props: any[]) {
                super();
                console.log('params:', props, constructor);
                const result = constructor.toString().replace(/\s/g, '').match(/constructor\(([a-zA-Z_$][a-zA-Z_$,0-9]*)?\)/)[1];
                result && console.log(result.split(','));
            }
        }
    }
}
@Binder()
class User {
    constructor(
        readonly username: string,
        readonly password: string,
        readonly age: number
    ) {
    }
}
const user = new User('Lily', '123', 18);