私はかなりタイプミスを慣れているので、愚かなことをしているだけかもしれませんが、バグや制限のようなものが見つかりました。私はFoo
を取る関数のためのインターフェイスを定義しました。その関数を別の関数に渡すと、渡す関数はanyFoo
とする必要があります。しかし、私がclass Bar extends Foo
と定義し、次にを受け取ったのですが、Foo
ではなく、Foo
の関数を必要とする関数に渡すことができます。例:TypeScriptの下限パラメータ
class Foo {
}
class Bar extends Foo {
}
interface TakesAnyFoo {
(x: Foo) : void;
}
function needsAFunctionThatTakesAnyFoo(f: TakesAnyFoo) {
let foo = new Foo();
f(foo);
}
function takesOnlyABar(x: Bar) {
console.log(`I got ${x}`);
}
needsAFunctionThatTakesAnyFoo(takesOnlyABar);
ここで私が必要とするのは、Javaの下限タイプと同等です。次のようなものがあります。
interface TakesAnyFoo<T super Foo> {
(x: T) : void;
}
ただし、Typescriptにはこれが含まれていません。 needsAFunctionThatTakesAnyFoo
に渡された関数が入力としてFoo
を受け入れなければならないという制約をどのように強制することができますか?我々が持っているあなたのコードの簡素化
感謝を。デザイン意思決定には失望しますが、それはあなたのせいではありません。 –