[英]TypeScript Mixins and Constructor Names
我有這個代碼示例在 TypeScript 中試驗 mixins。 但是,它並沒有返回我所期望的。
它應該給我: 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())
PS我用tsc mixins --target ES6
編譯。 否則,我會收到錯誤消息: error TS2339: Property 'name' does not exist on type 'Function'.
您只需要Class.name
。 Class.constructor
是Function
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.