我有一个带有
接口的打字稿定义文件 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}
答案 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);