簡體   English   中英

限制方法中的接口類型參數

[英]Restrict interface type parameter in method

我試圖傳達一種方法只有在其接口的類型參數符合某個約束時才有意義。 這是一個(非編譯)示例:

interface Array<T> {
    fold<B>(base: B, f: (acc: B, e: T) => B): B
    sum(): T is number
}

Array.prototype.fold = function(base, f) {
    let result = base
    for (let i = 0; i < this.length; i++)
        result = f(result, this[i])
    return result
}

Array.prototype.sum = function() {
    return this.fold(0, (acc, e) => acc + e)
};

[1, 'a', 3].sum() //? 1a3  <-- should be an error!

在這里,我試圖傳達這個sum只有在T extends number時才有意義。

你有正確的想法,只是錯誤的語法。

這就是你寫它的方式。

interface Array<T> {
  sum(this: number[]): number;
}

注意我們如何使用this合成參數的類型不會改變函數的arity。 您嘗試使用的語法,雖然有趣的猜測,用於另一個目的,即類型保護。

有趣的是,關於類型的注釋this優先於接口的類型。 您也可以聲明一個泛型參數,將其應用於this ,並對T進行限制,以便它也可以組合。 有很多靈活性。

這是一個有趣的一個結合了兩種接口類型,並細化其this

interface Array<T> {
  flatten(this: T[][]): T[];
}

暫無
暫無

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

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