簡體   English   中英

打字稿:通用接口,接口函數和類類型參數

[英]Typescript: generic interface, interface functions and class type parameters

我正在嘗試使用Typescript實現通用的離散間隔編碼樹 這里的泛型意味着我想允許區間端點為任意類,該類擴展了一個簡單的接口,該接口指定了離散的線性順序,從而強制了兩個方法成員nextlessThan的存在。 因為我想輸入方法,所以我假設我需要一個通用接口(所有代碼都可以在jsfiddle中找到):

interface DiscreteLinearOrder<T> {
    next = () => T;
    lessThan = (y: T) => Boolean;
}

然后我用數字實例化了這個(好吧,它不是離散的,而是將其視為整數;-)

class DLOnumber implements DiscreteLinearOrder<number> {
    private value: number;
    constructor(x: number) { this.value = x; }
    next = () => { return(this.value + 1); };
    lessThan = (y: number) => { return(this.value < y); };
    getValue = () => { return(this.value.toString()); }
}

到這里為止,它運行正常,並且運行類似

const bar = new DLOnumber(5);

解決了。

有了這個,我計划提供一個DLOinterval兩個參數的DLOinterval類,其中一個擴展了離散線性順序接口:

class DLOinterval<T, U extends DiscreteLinearOrder<T>> {
    private start: U;
    private end: U;
    private data: any;
    constructor(s: U, e: U, d: any) {
        this.start = s;
        this.end   = e;
        this.data  = d;
    }
}

但是這里的麻煩開始了:我無法定義類型別名並使用它:

type NumberInterval = DLOinterval<number, DLOnumber>;
const ggg = new NumberInterval(new DLOnumber(3),new DLOnumber(5),null)

我也不能直接實例化它:

const aaa = new DLOinterval<number, DLOnumber>(new DLOnumber(3),new DLOnumber(5),null)

我在這里想念什么?

嘗試這個:

const aaa = new DLOinterval<number, DLOnumber>(new DLOnumber(3), new DLOnumber(5), null);

您不需要從DLOinterval類創建類型,可以按如下所示直接使用它:

const ggg = new DLOinterval<number, DLOnumber>( new DLOnumber(3), new DLOnumber(5), null);

由於在注釋部分中提到的錯誤,應用於DLOinterval<T, U extends DiscreteLinearOrder<T>>的約束DLOinterval<T, U extends DiscreteLinearOrder<T>> 無法編譯 ,因為它將變得像嵌套的無限約束。 它如何為您工作?

它應該正確工作的唯一方法是鍵入第二個約束,以克服編譯器反對將模板類型鍵入為T的反對。

class DLOinterval<V, U extends DiscreteLinearOrder<any>>

為了制作摩卡測試的工作示例,我擴展了與下面的屏幕快照相同的界面:

在此處輸入圖片說明

暫無
暫無

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

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