簡體   English   中英

typescript定義實現實現通用接口的泛型類

[英]typescript definition implementing a generic class that implements generic interface

我有一個帶有類似界面的打字稿定義文件

   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}

問題是,對於接口,您需要實現靜態和實例接口以及構造函數( 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;
}

在我看來,您想要限制函數的參數類型,但是您希望稍后提供該函數的實現。 這是實現我理解的方式

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM