Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript类组合泛型_Javascript_Typescript - Fatal编程技术网

Javascript Typescript类组合泛型

Javascript Typescript类组合泛型,javascript,typescript,Javascript,Typescript,我正在尝试在typescript中使用类组成 const FoodMixin = superclass => class extends superclass { eat(food) { console.log(`Eating ${food}`); } }; class Animal<T> { prop: T; constructor(public name) { } } interface Prop {} class Dog extends

我正在尝试在typescript中使用类组成

const FoodMixin = superclass => class extends superclass {
  eat(food) {
    console.log(`Eating ${food}`);
  }
};

class Animal<T> {
  prop: T;
  constructor(public name) {
  }
}

interface Prop {}

class Dog extends FoodMixin(Animal<Prop>) {
  constructor(...args) {
    super(...args)
  }
}
应为1个参数,但得到2个


我怎样才能通过普通考试

将函数或构造函数用作值时,无法指定类型参数的问题

您可以显式指定类型参数(尽管这会导致静态方法丢失:

const FoodMixin = function <T extends new (...arsg: any[]) => any>(superclass: T) {
    return class extends superclass {
        eat(food: string) {
            console.log(`Eating ${food}`);
        }
    };
}
class Animal<T> {
    prop?: T ;
    constructor(public name: string) {
    }
    breathe() : void{}

    static mutate(): void{}
}
class Dog extends FoodMixin<new (name: string) => Animal<Prop>>(Animal) {
    constructor(name: string) {
        super("")
    }
}

var dog = new Dog("");
dog.breathe();
dog.eat("");
dog.prop // is Prop
Dog.mutate // error
const FoodMixin = function <T extends new (...arsg: any[]) => any>(superclass: T) {
    return class extends superclass {
        eat(food: string) {
            console.log(`Eating ${food}`);
        }
    };
}
class Animal<T> {
    prop?: T ;
    constructor(public name: string) {
    }
    breathe() : void{}

    static mutate(): void{}
}
class Dog extends FoodMixin<new (name: string) => Animal<Prop>>(Animal) {
    constructor(name: string) {
        super("")
    }
}

var dog = new Dog("");
dog.breathe();
dog.eat("");
dog.prop // is Prop
Dog.mutate // error
class Animal<T> {
    prop?: T ;
    constructor(public name: string) {
    }
    breathe() : void{}

    static mutate(): void{}
}
class Dog extends FoodMixin(class extends Animal<Prop>{}) {
    constructor(name: string) {
        super("")
    }
}

var dog = new Dog("");
dog.breathe();
dog.eat("");
dog.prop // is Prop
Dog.mutate // ok