比方說,我在TypeScript中創建一個容器。它可以是任何容器,但我會用下面這個簡單的例子:是否可以爲特定方法約束泛型類?
class Container<T> {
val: T;
constructor(t: T) {
this.val = t;
}
}
說我想提供一個功能,因此,如果我有兩個容器與數字,我可以很容易地創建一個新的容器這些數字加在一起。
class Container<T> {
val: T;
constructor(t: T) {
this.val = t;
}
add(c: Container<number>): Container<number> {
return new Container(this.val + c.val);
}
}
但是我不明白是否有可能做出上述代碼類型檢查。問題是,我所知道的關於this.val
的是它的類型是T
(這是什麼)。我想以某種方式約束add
方法,使其只能在的地方Container<T>
實例T == number
被調用。在TypeScript中可能嗎?
上面的僅僅是一個人爲的例子。我真正想要做的是爲應用函數創建一個TypeScript接口。一個適用函數,對於Container
應該是這樣的方法:
ap<A, B>(c: Container<A>): Container<B> {
return new Container(this.val(c.val));
}
因此,在這種情況下,我必須知道T == (a: A) => B
。更一般地說,我希望能夠定義這個接口:
interface Applicative<T> {
...
ap: <A, B>(a: Applicative<A>) => Applicative<B> // where T == (a: A) => B
...
}
這是可能的嗎?
有,看看手冊https://www.typescriptlang.org/docs/handbook/generics.html#generic-constraints – toskv
我讀過的文檔。但它只顯示如何將通用約束添加到函數。據我所知,這並不能解決我的問題。 – paldepind
對於單一方法來說,限制t是不可能的。 – toskv