And*_*ori 6 generics instantiation typescript
鉴于以下课程:
class Datum {}
我error TS2304: Cannot find name 'T'尝试执行以下操作时收到错误消息():
class Data<T extends Datum> {
    datum: T
    constructor() {
        this.datum = new T()
    }
}
那么我尝试这样做,但我也收到一条错误消息(Type 'Datum' is not assignable to type 'T'):
 class Data<T extends Datum> {
    datum: T
    constructor() {
        this.datum = new Datum();
    }
}
问题:是否无法实例化约束类型T?我的假设是,由于T受到约束而必须延伸Datum,我能够做到datum: T = new Datum().
要记住两件事:首先,在编译期间擦除泛型.它们没有运行时影响,因此任何尝试引用泛型类型就好像它是运行时值一样没有任何意义.
其次,派生类可能Datum具有构造函数参数.即使T确实存在,你也不能盲目地new用零参数.
把它放在一起,你想要的是这样的:
class Datum {}
class Data<T extends Datum> {
    datum: T
    constructor(ctor: new() => T) {
        this.datum = new ctor();
    }
}
class ByteDatum extends Datum {
    new() { }
}
let y = new Data(ByteDatum);
let x = y.datum; // x: ByteDatum