angular-redux/store

Angular Store select error: no initializer message after updating to Angular 5

UrielMhezzek opened this issue · 2 comments

This is a...

  • feature request
  • bug report
  • [x ] usage question

What toolchain are you using for transpilation/bundling?

  • [ x] @angular/cli
  • Custom @ngTools/webpack
  • Raw ngc
  • SystemJS
  • Rollup
  • Other

Environment

NodeJS Version: 8.2.1
Typescript Version: 2.7.1
Angular Version: 5.2.4
@angular-redux/store version: 7.1.0
@angular/cli version: (if applicable) 1.2.6
OS: Windows 10 64 Bit

Link to repo showing the issus

(optional, but helps a lot)
I use the Angular Store in my app. After updating from Angular 4 to 5, I always get the following message when querying a variable

TS2564: Property' messages' has no initializer and is not definitely assigned in the constructor.

For example, with this property

@select ([' messagelist',' messages']]) readonly messages: Observable<Message[]>;
Before the update I used the following line of code

@select (s => s. messagelist. messages) messages: Message[] =[];
Here is the top level of my store

export interface IAppState {
   identity: IIdentityState;
   messagelist: IMessagelistState;
   settings: ISettingsState;
}

export const INITIAL_STATE: IAppState = {
   identity: IDENTITY_INITIAL_STATE,
   messagelist: MESSAGELIST_INITIAL_STATE,
   settings: SETTINGS_INITIAL_STATE,
}



export const rootReducer = composeReducers(
   defaultFormReducer(),
   combineReducers({
       messagelist: messageListReducer,
       identity: identityReducer,
       settings: settingsReducer
  })
);

Here is the lowest level of my stores

export interface IMessagelistState {
    messages: Message[];
    ids: number;
}

export const MESSAGELIST_INITIAL_STATE: IMessagelistState = {
    messages: [],
    ids: 0
}

Expected Behaviour:

No error message

Actual Behaviour:

Error Message
ERROR in [at-loader] ./ClientApp/app/components/messagelist/messagelist.component.ts:16:46

Stack Trace/Error Message:

Additional Notes:

(optional)

I experimented around and found a workaround.

export class MessageListComponent {
    messages: Observable<Message[]> = new Observable<Message[]>();

    constructor(private ngRedux: NgRedux<IAppState>) {
        this.messages = ngRedux.select(['messagelist', 'messages']);
    }
}

The root cause ist the Typescript update to 2.7.1 which added new checks, you can get the old behavior if you set

"strictPropertyInitialization": false

in tsconfig.json.