From 2c29d9ee0aad001b21b066d76ad839f28970ca31 Mon Sep 17 00:00:00 2001 From: Aleh Kashnikau Date: Sun, 1 Jan 2017 16:10:01 +0300 Subject: [PATCH 1/2] Add mapped type for combineReducers in index.d.ts Updated typescript to 2.1.4 Updated typescript-definition-tester to 0.0.5 Updated typescript tests to use proper import Added mapped type to index.d.ts --- index.d.ts | 6 +- package.json | 4 +- test/typescript/actionCreators.ts | 2 +- test/typescript/actions.ts | 2 +- test/typescript/compose.ts | 2 +- test/typescript/dispatch.ts | 4 +- test/typescript/middleware.ts | 4 +- test/typescript/reducers.ts | 5 +- test/typescript/store.ts | 2 +- yarn.lock | 105 +++++++++++++----------------- 10 files changed, 59 insertions(+), 77 deletions(-) diff --git a/index.d.ts b/index.d.ts index 88a4c0fa30..437c989952 100644 --- a/index.d.ts +++ b/index.d.ts @@ -48,8 +48,8 @@ export type Reducer = (state: S, action: A) => S; /** * Object whose values correspond to different reducer functions. */ -export interface ReducersMapObject { - [key: string]: Reducer; +export type ReducersMapObject = { + [K in keyof S]: Reducer; } /** @@ -70,7 +70,7 @@ export interface ReducersMapObject { * @returns A reducer function that invokes every reducer inside the passed * object, and builds a state object with the same shape. */ -export function combineReducers(reducers: ReducersMapObject): Reducer; +export function combineReducers(reducers: ReducersMapObject): Reducer; /* store */ diff --git a/package.json b/package.json index bc124491ea..46d4f832fc 100644 --- a/package.json +++ b/package.json @@ -108,8 +108,8 @@ "jest": "^15.1.1", "rimraf": "^2.3.4", "rxjs": "^5.0.0-beta.6", - "typescript": "^1.8.0", - "typescript-definition-tester": "0.0.4", + "typescript": "^2.1.0", + "typescript-definition-tester": "0.0.5", "webpack": "^1.9.6" }, "npmName": "redux", diff --git a/test/typescript/actionCreators.ts b/test/typescript/actionCreators.ts index c3eac83b00..a2ec2c8f35 100644 --- a/test/typescript/actionCreators.ts +++ b/test/typescript/actionCreators.ts @@ -1,7 +1,7 @@ import { ActionCreator, Action, Dispatch, bindActionCreators, ActionCreatorsMapObject -} from "../../index.d.ts"; +} from "../../"; interface AddTodoAction extends Action { diff --git a/test/typescript/actions.ts b/test/typescript/actions.ts index 1a0bb29d03..1122c13357 100644 --- a/test/typescript/actions.ts +++ b/test/typescript/actions.ts @@ -1,4 +1,4 @@ -import {Action as ReduxAction} from "../../index.d.ts"; +import {Action as ReduxAction} from "../../"; namespace FSA { diff --git a/test/typescript/compose.ts b/test/typescript/compose.ts index 3fbb4d0dbc..3e3d665277 100644 --- a/test/typescript/compose.ts +++ b/test/typescript/compose.ts @@ -1,4 +1,4 @@ -import {compose} from "../../index.d.ts"; +import {compose} from "../../"; // copied from DefinitelyTyped/compose-function diff --git a/test/typescript/dispatch.ts b/test/typescript/dispatch.ts index bc54b17fb9..271135f802 100644 --- a/test/typescript/dispatch.ts +++ b/test/typescript/dispatch.ts @@ -1,4 +1,4 @@ -import {Dispatch, Action} from "../../index.d.ts"; +import {Dispatch, Action} from "../../"; declare const dispatch: Dispatch; @@ -6,7 +6,7 @@ declare const dispatch: Dispatch; const dispatchResult: Action = dispatch({type: 'TYPE'}); // thunk -declare module "../../index.d.ts" { +declare module "../../" { export interface Dispatch { (asyncAction: (dispatch: Dispatch, getState: () => S) => R): R; } diff --git a/test/typescript/middleware.ts b/test/typescript/middleware.ts index 5111873df9..ccdfbcf12c 100644 --- a/test/typescript/middleware.ts +++ b/test/typescript/middleware.ts @@ -1,9 +1,9 @@ import { Middleware, MiddlewareAPI, applyMiddleware, createStore, Dispatch, Reducer, Action -} from "../../index.d.ts"; +} from "../../"; -declare module "../../index.d.ts" { +declare module "../../" { export interface Dispatch { (asyncAction: (dispatch: Dispatch, getState: () => S) => R): R; } diff --git a/test/typescript/reducers.ts b/test/typescript/reducers.ts index 215b872349..9e49bce9c9 100644 --- a/test/typescript/reducers.ts +++ b/test/typescript/reducers.ts @@ -1,7 +1,7 @@ import { Reducer, Action, combineReducers, ReducersMapObject -} from "../../index.d.ts"; +} from "../../"; type TodosState = string[]; @@ -47,8 +47,7 @@ type RootState = { counter: CounterState; } - -const rootReducer: Reducer = combineReducers({ +const rootReducer: Reducer = combineReducers({ todos: todosReducer, counter: counterReducer, }) diff --git a/test/typescript/store.ts b/test/typescript/store.ts index 2939a237dd..4407d6838d 100644 --- a/test/typescript/store.ts +++ b/test/typescript/store.ts @@ -1,7 +1,7 @@ import { Store, createStore, Reducer, Action, StoreEnhancer, GenericStoreEnhancer, StoreCreator, StoreEnhancerStoreCreator, Unsubscribe -} from "../../index.d.ts"; +} from "../../"; type State = { diff --git a/yarn.lock b/yarn.lock index f3d75041aa..f70585f779 100644 --- a/yarn.lock +++ b/yarn.lock @@ -50,7 +50,7 @@ ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" -ansi-regex@*, ansi-regex@^2.0.0: +ansi-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" @@ -183,10 +183,6 @@ ast-types@0.8.12: version "0.8.12" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc" -ast-types@0.8.15: - version "0.8.15" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52" - ast-types@0.9.2: version "0.9.2" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.2.tgz#2cc19979d15c655108bf565323b8e7ee38751f6b" @@ -1206,7 +1202,7 @@ debug@~2.2.0: dependencies: ms "0.7.1" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2044,7 +2040,7 @@ iferr@^0.1.5, iferr@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2782,7 +2778,7 @@ lodash._basefor@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" -lodash._baseindexof@*, lodash._baseindexof@^3.0.0: +lodash._baseindexof@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" @@ -2800,11 +2796,11 @@ lodash._baseuniq@~4.5.0: lodash._createset "~4.0.0" lodash._setcache "~4.1.0" -lodash._bindcallback@*, lodash._bindcallback@^3.0.0: +lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" -lodash._cacheindexof@*, lodash._cacheindexof@^3.0.0: +lodash._cacheindexof@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" @@ -2816,7 +2812,7 @@ lodash._createassigner@^3.0.0: lodash._isiterateecall "^3.0.0" lodash.restparam "^3.0.0" -lodash._createcache@*, lodash._createcache@^3.0.0: +lodash._createcache@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" dependencies: @@ -2826,7 +2822,7 @@ lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" -lodash._getnative@*, lodash._getnative@^3.0.0: +lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -2980,7 +2976,7 @@ lodash.rest@^4.0.0: version "4.0.5" resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa" -lodash.restparam@*, lodash.restparam@^3.0.0: +lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" @@ -3162,14 +3158,10 @@ multimatch@^2.1.0: arrify "^1.0.0" minimatch "^3.0.0" -mute-stream@0.0.5: +mute-stream@0.0.5, mute-stream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" -mute-stream@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" - nan@^2.3.0: version "2.5.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8" @@ -3923,7 +3915,7 @@ readable-stream@~2.1.4, readable-stream@~2.1.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" dependencies: @@ -3956,7 +3948,7 @@ realize-package-specifier@~3.0.1: dezalgo "^1.0.1" npm-package-arg "^4.1.1" -recast@0.10.33: +recast@0.10.33, recast@^0.10.10: version "0.10.33" resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697" dependencies: @@ -3965,15 +3957,6 @@ recast@0.10.33: private "~0.1.5" source-map "~0.5.0" -recast@^0.10.10: - version "0.10.43" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f" - dependencies: - ast-types "0.8.15" - esprima-fb "~15001.1001.0-dev-harmony-fb" - private "~0.1.5" - source-map "~0.5.0" - recast@^0.11.17: version "0.11.18" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.18.tgz#07af6257ca769868815209401d4d60eef1b5b947" @@ -4063,33 +4046,33 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@2, request@^2.47.0, request@^2.74.0, request@~2.74.0: - version "2.74.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" +request@2, request@^2.47.0, request@~2.69.0: + version "2.69.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.69.0.tgz#cf91d2e000752b1217155c005241911991a2346a" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" - bl "~1.1.2" + bl "~1.0.0" caseless "~0.11.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" - form-data "~1.0.0-rc4" + form-data "~1.0.0-rc3" har-validator "~2.0.6" - hawk "~3.1.3" + hawk "~3.1.0" http-signature "~1.1.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.7" node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" + oauth-sign "~0.8.0" + qs "~6.0.2" stringstream "~0.0.4" - tough-cookie "~2.3.0" + tough-cookie "~2.2.0" tunnel-agent "~0.4.1" -request@^2.55.0, request@^2.79.0: +request@^2.55.0, request@^2.74.0, request@^2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -4114,30 +4097,30 @@ request@^2.55.0, request@^2.79.0: tunnel-agent "~0.4.1" uuid "^3.0.0" -request@~2.69.0: - version "2.69.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.69.0.tgz#cf91d2e000752b1217155c005241911991a2346a" +request@~2.74.0: + version "2.74.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" - bl "~1.0.0" + bl "~1.1.2" caseless "~0.11.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" - form-data "~1.0.0-rc3" + form-data "~1.0.0-rc4" har-validator "~2.0.6" - hawk "~3.1.0" + hawk "~3.1.3" http-signature "~1.1.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.7" node-uuid "~1.4.7" - oauth-sign "~0.8.0" - qs "~6.0.2" + oauth-sign "~0.8.1" + qs "~6.2.0" stringstream "~0.0.4" - tough-cookie "~2.2.0" + tough-cookie "~2.3.0" tunnel-agent "~0.4.1" require-directory@^2.1.1: @@ -4222,7 +4205,11 @@ sax@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", semver@5.1.0, "semver@^2.3.0 || 3.x || 4 || 5", semver@~5.1.0: +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +semver@5.1.0, semver@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.0.tgz#85f2cf8550465c4df000cf7d86f6b054106ab9e5" @@ -4230,10 +4217,6 @@ semver@^4.1.0: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" -semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -4427,7 +4410,7 @@ stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" -strip-ansi@*, strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1: +strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: @@ -4588,17 +4571,17 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -typescript-definition-tester@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/typescript-definition-tester/-/typescript-definition-tester-0.0.4.tgz#94b9edc4fe803b47f5f64ff5ddaf8eed1196156c" +typescript-definition-tester@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/typescript-definition-tester/-/typescript-definition-tester-0.0.5.tgz#91c574d78ea05b81ed81244d50ec30d8240c356f" dependencies: assertion-error "^1.0.1" dts-bundle "^0.2.0" lodash "^3.6.0" -typescript@^1.8.0: - version "1.8.10" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-1.8.10.tgz#b475d6e0dff0bf50f296e5ca6ef9fbb5c7320f1e" +typescript@^2.1.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.1.4.tgz#b53b69fb841126acb1dd4b397d21daba87572251" uglify-js@^2.6, uglify-js@~2.7.3: version "2.7.5" @@ -4678,7 +4661,7 @@ v8flags@^2.0.10: dependencies: user-home "^1.1.1" -validate-npm-package-license@*, validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: From c0d9d054195faeb50c54baf63accc9d9b9d4d12d Mon Sep 17 00:00:00 2001 From: Aleh Kashnikau Date: Tue, 3 Jan 2017 18:25:27 +0300 Subject: [PATCH 2/2] add strict null check for reducer Updated Reducer type in index.d.ts Add strictNullChecks flag to typescript spec --- index.d.ts | 2 +- test/typescript.spec.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 437c989952..7c62f0df79 100644 --- a/index.d.ts +++ b/index.d.ts @@ -43,7 +43,7 @@ export interface Action { * * @template S State object type. */ -export type Reducer = (state: S, action: A) => S; +export type Reducer = (state: S | undefined, action: A) => S; /** * Object whose values correspond to different reducer functions. diff --git a/test/typescript.spec.js b/test/typescript.spec.js index 8943a15658..de86902bb0 100644 --- a/test/typescript.spec.js +++ b/test/typescript.spec.js @@ -6,6 +6,9 @@ describe('TypeScript definitions', function () { tt.compileDirectory( __dirname + '/typescript', fileName => fileName.match(/\.ts$/), + { + strictNullChecks: true + }, () => done() ) })