.d.tsファイルに再選択(https://github.com/reactjs/reselect)があることがわかります。だから、ここで何が起こっているのですか?それはTypescriptコンパイラの問題ですか?私のtsconfig?Reselect.createSelector()の誤った戻り値の型を生成するTypescriptコンパイラ
問題を再現するには、次の
Demo.ts
import { createSelector, Selector } from 'reselect';
export interface DemoState {
values: {
value1: number,
value2: number
},
}
export const selectTotal = createSelector<DemoState, number, number, number>(
state => state.values.value1,
state => state.values.value2,
(value1, value2) => {
return value1 + value2;
}
);
上記createSelector()
がタイプSelector<DemoState, number>
返すべきであることが表示されますreselect.d.tsから:
reselect.d.tsを
function createSelector<TInput, TOutput, T1, T2>(selector1: Selector<TInput, T1>, selector2: Selector<TInput, T2>, combiner: (arg1: T1, arg2: T2) => TOutput): Selector<TInput, TOutput>;
type Selector<TInput, TOutput> = (state: TInput, props?: any) => TOutput;
ただし、typescriptコンパイラはどのようなものですか定義のためのtual生成は次のとおりです。
Demo.d.ts
export declare const selectTotal: Selector<DemoState, number, number, number>;
スヨン...私はエラーを取得する別のプロジェクトでselectTotal
をインポートするために行くとき:「ジェネリック型 『セレクタ』 2タイプが必要です議論 "と述べた。なぜなら、reselect.d.tsはSelector<TInput, TOutput>
しか定義しておらず、私が知る限り、createSelector
は、渡された型引数の数にかかわらず、返されるはずです。私は生成された正しい定義を取得することができます
唯一の方法は、明示的にcreateSelector
結果をキャストしているが、私は、私はこれを行うために持つべきであるとは思わない...活字体2.0.3を使用して
export const selectTotal = createSelector<DemoState, number, number, number>(
state => state.values.value1,
state => state.values.value2,
(value1, value2) => {
return value1 + value2;
}) as Selector<DemoState, number>;
、関連する場合は私のtsconfigを参照してください。
{
"compileOnSave": true,
"compilerOptions": {
"rootDir": "./src",
"outDir": "./dist",
"declaration": true,
"sourceMap": true,
"target": "es6",
"module": "es6",
"moduleResolution": "node",
"jsx": "preserve",
"allowSyntheticDefaultImports": true,
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true,
"removeComments": false,
"preserveConstEnums": true
},
"exclude": [
"node_modules",
"dist"
]
}