【发布时间】:2018-01-10 08:45:39
【问题描述】:
我想扩展一个类并将其动态类型折叠为特定类型(从T 到Person)。
我为此示例创建了虚拟类:
class Person {
constructor(public name: string){}
}
class Base<T> {
reference?: T
name: string
constructor(name: string) {
// Assign properties from T to this
this.name = name
}
static fromObject<T extends { name: string }>(object: T){
const base = new Base(object.name)
base.reference = object
return base
}
}
class Master<T> extends Base<T> {
static fromBase<T>(base: Base<T>){
const master = new Master(base.name)
master.reference = base.reference
return master
}
static fromObject<T extends { name: string }>(object: T){
return Master.fromBase(Base.fromObject(object))
}
}
class PersonMaster extends Master<Person> {
constructor(person: Person){
super(person.name)
this.reference = person
}
static fromBase(base: Base<Person>){
return new PersonMaster(base)
}
}
编译器返回此错误:
类静态端 typeof PersonMaster 错误地扩展了基类静态端 typeof Master。 fromBase 的属性类型不兼容。类型 (base: Base<Person>) => PersonMaster 不可分配给类型 <T>(base: Base<T>) => Master<{}>。 base 和 base 的参数类型不兼容。类型 Base<T> 不可分配给 Base<Person>。类型 T 不能分配给类型 Person。
【问题讨论】:
标签: typescript generics