0
同じインタフェースで定義された関数型の2つのがシナリオです。複数の名前のない関数を持つ関数型
type InterfaceB<R, S> = (param1: S, param2: R) => R;
interface InterfaceA<S> {
<R>(action: R): R;
}
interface InterfaceA<S> {
<R>(action: InterfaceB<R, S>): R;
}
const x: InterfaceA<string> =(): InterfaceA<string> => {
var a1: (action: number) => number = (action: number) => { return 1; };
var a2: (action: (p: string, p2: number) => number) => number = (action: (p: string, p2: number) => number) => { return 2; };
return { a1, a2 } as any;
};
const result = x("This should take the (action:R) signature since it's a single value")
console.log(result);
コードはコンパイルしますが、いくつかの問題がありますキャストas any
を回避する方法は、
- ありますか?
x
が呼び出されたとき、VsCodeは右の2つのオーバーロードを示しますが、2つの関数のどちらも呼び出されず、結果は2つのオブジェクトを持つオブジェクトリテラルです(これは私が返すものなので意味があります)。変更には何が必要ですか?そのようなインターフェースの
達成しようとしていることを具体的に説明できますか?予想されるアウトプット/ビヘイビアは?また、ジェネリックパラメータを定義して使用しても意味がありません(最初の関数 'Interface InterfaceA
{(処置:R):R; })) –
この例は、Redux Dispatchの簡略版です。あなたがindex.d.tsを見ると、Dispathは(Tを直接使用することなく)同じようにジェネリックを使用していることがわかります。この例では、Reduxの定義ファイルにDispatchの2番目の定義を追加するRedux-Thunkライブラリの組み合わせで、ReduxのDispatchを単純化しています。 –
実際にReduxの 'Dispatch'は、 ''という型パラメータ 'D'を使用しています: https://github.com/reactjs/redux/blob/master/index.d.ts –