たとえば、TypeScriptでコンテナを作成します。これは、任意のコンテナかもしれないが、私は次の簡単な例を使用します:特定のメソッドの汎用クラスを制約できますか?
class Container<T> {
val: T;
constructor(t: T) {
this.val = t;
}
}
は、私が番号を持つ2個のコンテナを持っている場合、私は簡単で新しいコンテナを作成できるように、私は機能を提供したいと言いますそれらの数字は一緒に追加されました。
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インターフェイスを作成することです。
ap<A, B>(c: Container<A>): Container<B> {
return new Container(this.val(c.val));
}
したがって、この場合には、私はT == (a: A) => B
ことを知っている必要があります:応用的機能はContainer
のために、このようになります方法があります。より一般的には、このインターフェースを定義できるようにしたいと考えています:
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
1つのメソッドに対してtを制約することはできません。 – toskv