編輯:添加的package.json摘錄分配正確的類型來重新選擇createSelector功能
我想實現在現有的反應項目打字稿,我與Reselect圖書館面臨的困難。 Typescript編譯器堅持導入createSelector函數的第一個定義,並且無法識別我的函數的簽名對應於另一個定義。
定義它導入:
export function createSelector<S, R1, T>(
selector: Selector<S, R1>,
combiner: (res: R1) => T,
): OutputSelector<S, T, (res: R1) => T>;
一個我想用:
export function createSelector<S, R1, R2, T>(
selectors: [Selector<S, R1>,
Selector<S, R2>],
combiner: (res1: R1, res2: R2) => T,
): OutputSelector<S, T, (res1: R1, res2: R2) => T>;
這裏是我的實際代碼:
// groups.selectors.tsx
import { Selector, createSelector } from 'Reselect';
import { IGroup, IQuestionnaire, IGroupReselect, IState } from '../interfaces';
const getGroups:Selector<IState, IGroup[]> = state => state.groups;
const getQuestionnaires:Selector<IState, IQuestionnaire[]> = state => state.questionnaires;
export const groups = createSelector<IState, IGroup[], IQuestionnaire[], IGroupReselect>(
[getGroups, getQuestionnaires],
(g, q) => {
return g.map(group => Object.assign(
{},
group,
{questionnaires: group.questionnairesIds.map(id => q.find(q => q.id === id))}
));
}
);
而如果是我是任何幫助,這裏是我的ts.config:
{
"compilerOptions": {
"module": "es6",
"target": "es6",
"outDir": ".temp",
"allowSyntheticDefaultImports": true,
"baseUrl": "src",
"noImplicitAny": false,
"sourceMap": false,
"jsx": "preserve",
"strict": true,
"moduleResolution": "node"
},
"exclude": [
"node_modules"
],
"files": [
"typings.d.ts"
]
}
我對TypeScript並不完全熟悉,所以在我的實現中肯定有些問題。讓我感到困惑的是,如果我編寫最簡單的重選器,即只有1個選擇器和1個合併器的重選器,它會通過類型檢查,這給我的印象是編譯器沒有在重載函數中正確選擇正確的定義
"dependencies": {
"react": "^15.5.4",
"react-dom": "^15.5.4",
"react-redux": "^5.0.5",
"react-router": "^4.1.1",
"react-router-dom": "^4.1.1",
"redux": "^3.6.0",
"redux-devtools-extension": "^2.13.2",
"redux-thunk": "^2.2.0",
"reselect": "^3.0.1"
},
"devDependencies": {
"@types/react": "^15.0.25",
"@types/react-router-dom": "^4.0.4",
"@types/redux-thunk": "^2.1.0",
"typescript": "^2.3.3"
},
我會先檢查一下,看看你有你鏈接到重新選擇的index.d.ts的版本。直到最近才添加對選擇器數組的支持(我認爲是3.0版)。你可以完全省略數組;不需要重新選擇(雖然大多數示例都使用它)。 –
這可能確實是我的依賴版本的問題。至於數組選擇器,我正在運行重新選擇3.0.1,所以它不應該是一個問題。 –