TypeScript“扩展”通用约束

ser*_*0ne 5 generics generic-constraints typescript

extends在 TypeScript 中使用约束,如下所示:

class Animal {}
class Lion extends Animal {}
class Bear extends Animal {}

class ZooKeeper<T extends Animal> {
    constructor(p: T = new Animal()) {

    }
}

new ZooKeeper(new Animal());
Run Code Online (Sandbox Code Playgroud)

p: T = new Animal()包含一个错误:

“动物”类型不能分配给“T”类型。

构造函数 Animal(): 动物

为什么,我该怎么做,以便我可以使用Animal, 代替Animal子类型?

来源

Ham*_*pus 3

将你的动物投向T,它就会起作用。

class ZooKeeper<T extends Animal> {
    constructor(p: T = <T>new Animal()) {

    }
}
Run Code Online (Sandbox Code Playgroud)

根据您自己的评论(对于未来的读者)您还可以这样做:

class ZooKeeper<T extends Animal> {
    constructor(p: T = new Animal() as T) {

    }
}
Run Code Online (Sandbox Code Playgroud)