2016-10-23 5 views
0

.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" 
    ] 
} 

答えて

関連する問題