Всем привет!
Есть следующий код:
function loggingClassDecorator(url: string) {
return function <T extends { new (...args: any[]): {} }>(constructor: T) {
return class extends constructor {
isUrgent: boolean = false
constructor(...args: any[]) {
super(...args)
console.log('Log: new instance of class ' + constructor.name)
console.log('Reporting URL: ' + url)
}
}
}
}
@loggingClassDecorator('https://example.com/needs-dark-mode')
class BugReport {
type: string = 'report'
constructor(public title: string) {}
}
const bug = new BugReport('Needs dark mode')
console.log(bug.title) // Needs dark mode
console.log(bug.type) // report
Подскажите, как правильно читать следующую строчку?
function <T extends { new (...args: any[]): {} }>(constructor: T)
Я читаю её следующим образом:
{ new (...args: any[]): {} } — это сигнатура
класса, чей конструктор принимает произвольное кол-во аргументов и возвращает инстанс (объект)
Соответственно, мы имеем дело с функцией, которая в качестве аргумента принимает конструктор класса (функцию-конструктор), этот конструктор должен быть типа Т, т.е. быть любым произвольным классом.
Если не так, поправьте, пожалуйста.
Не совсем понимаю, зачем здесь квадратные скобки.
Спасибо!