diff --git a/index.d.ts b/index.d.ts index 50e8d018fa..4e03686da3 100644 --- a/index.d.ts +++ b/index.d.ts @@ -69,7 +69,9 @@ export type PreloadedState = Required extends { } : never : { - [K in keyof S]: S[K] extends object ? PreloadedState : S[K] + [K in keyof S]: S[K] extends (string | number | boolean | symbol) + ? S[K] + : PreloadedState } /* reducers */ diff --git a/package-lock.json b/package-lock.json index 892a707bf0..e31bda890f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7305,9 +7305,9 @@ } }, "typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.6.tgz", + "integrity": "sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==", "dev": true }, "typings-tester": { diff --git a/package.json b/package.json index d8bafaa9d8..be86eceac4 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "rollup-plugin-replace": "^2.2.0", "rollup-plugin-terser": "^5.1.1", "rxjs": "^6.5.2", - "typescript": "^3.5.3", + "typescript": "^3.9.6", "typings-tester": "^0.3.2" }, "npmName": "redux", diff --git a/test/typescript/store.ts b/test/typescript/store.ts index 123464ce55..60c1ceaa28 100644 --- a/test/typescript/store.ts +++ b/test/typescript/store.ts @@ -11,12 +11,16 @@ import { } from 'redux' import 'symbol-observable' +type BrandedString = string & { _brand: 'type' } +const brandedString = 'a string' as BrandedString + type State = { a: 'a' b: { c: 'c' d: 'd' } + c: BrandedString } interface DerivedAction extends Action { @@ -30,7 +34,8 @@ const reducer: Reducer = ( b: { c: 'c', d: 'd' - } + }, + c: brandedString }, action: Action ): State => { @@ -43,7 +48,8 @@ const reducerWithAction: Reducer = ( b: { c: 'c', d: 'd' - } + }, + c: brandedString }, action: DerivedAction ): State => { @@ -58,17 +64,20 @@ const store: Store = createStore(reducer) const storeWithPreloadedState: Store = createStore(reducer, { a: 'a', - b: { c: 'c', d: 'd' } + b: { c: 'c', d: 'd' }, + c: brandedString }) // typings:expect-error const storeWithBadPreloadedState: Store = createStore(reducer, { - b: { c: 'c' } + b: { c: 'c' }, + c: brandedString }) const storeWithActionReducer = createStore(reducerWithAction) const storeWithActionReducerAndPreloadedState = createStore(reducerWithAction, { a: 'a', - b: { c: 'c', d: 'd' } + b: { c: 'c', d: 'd' }, + c: brandedString }) funcWithStore(storeWithActionReducer) funcWithStore(storeWithActionReducerAndPreloadedState) @@ -77,7 +86,8 @@ funcWithStore(storeWithActionReducerAndPreloadedState) const storeWithActionReducerAndBadPreloadedState = createStore( reducerWithAction, { - b: { c: 'c' } + b: { c: 'c' }, + c: brandedString } ) @@ -89,7 +99,8 @@ const storeWithPreloadedStateAndEnhancer: Store = createStore( reducer, { a: 'a', - b: { c: 'c', d: 'd' } + b: { c: 'c', d: 'd' }, + c: brandedString }, enhancer )