typescript定义实现实现通用接口的泛型类

时间:2015-04-27 21:20:54

标签: typescript

我有一个带有

接口的打字稿定义文件
   interface IStreamHandler<E> {
      stopStream(): void;
      process(E : E);
      onReady(bReady : boolean):void;
   }

我想实例化这个,所以我声明了一个像

这样的变量
 declare var StreamHandler: IStreamHandler<E>; 

但不允许这样做。

如何创建定义语法,以便我可以这样做?

   var sh = new StreamHandler<Animal>(); 
   sh.process(E: Animal){//code impl}

2 个答案:

答案 0 :(得分:4)

问题是,对于接口,您需要为静态接口和实例接口以及构造函数(new())实现。这可行:

interface IStreamHandler_Static {
    new<E>():IStreamHandler<E>; 
}
interface IStreamHandler<E> {
    stopStream(): void;
    process(e : E);
    onReady(bReady : boolean):void;
}

declare var StreamHandler: IStreamHandler_Static;

但如果它是外部的,那么完全宣布这个类可能会更好。

interface IStreamHandler<E> {
    stopStream(): void;
    process(e : E);
    onReady(bReady : boolean):void;
}

declare class StreamHandler<E> implements IStreamHandler<E> {
    constructor() {}
    stopStream(): void;
    process(e : E);
    onReady(bReady : boolean):void;
}

答案 1 :(得分:0)

在我看来,您想要限制函数的参数类型,但是您希望稍后提供该函数的实现。 这是实现我理解的方式

interface Animals {
    walk():void
}

class Cat {
    walk =():void =>{
        alert("I am walking");
    }
}

interface IStreamHandler<E extends Animals> {
    stopStream(): void;
    process(E : E);
    onReady(bReady : boolean):void;
}

var animal:Animals = new Cat();  
var sh = <IStreamHandler<Cat>>{};

sh.process=(animal)=>{
    animal.walk();
}
sh.process(animal);