我有这个代码样本,用来测试TypeScrip中的Mixin.然而,它没有返回我预期的结果.
它应该给我User ({"id":3,"name":"Lorenzo Delaurentis"})
分.
相反,我得到的是:Function ({"id":3,"name":"Lorenzo Delaurentis"})
.
let Name = Class.constructor.name
线应该给我打User
分,但事实并非如此.我是不是漏掉了什么明显的东西?
type ClassConstructor<T> = new(...args: any[]) => T
function withDebug<C extends ClassConstructor<{
getDebugValue(): object
}>>(Class: C) {
return class extends Class {
constructor(...args: any[]) {
super(...args)
}
debug() {
let Name = Class.constructor.name
let value = this.getDebugValue()
return `${Name} (${JSON.stringify(value)})`
}
}
}
class DebugUser {
constructor(
private id: number,
private firstName: string,
private lastName: string
) {}
getDebugValue() {
return {
id: this.id,
name: `${this.firstName} ${this.lastName}`
}
}
}
let User = withDebug(DebugUser)
let user = new User(3, 'Lorenzo', "Delaurentis")
console.log(user.debug())
另外,我的数据是tsc mixins --target ES6
分.否则,我会得到一个错误:error TS2339: Property 'name' does not exist on type 'Function'.