interface ZooStateModel {
{ type: 'zebra', age: 'old', name: 'Ponny' },
{ type: 'panda', age: 'young', name: 'Jimmy' }
static getZooAnimals(zooName: string) {
return createSelector([ZooState], (state: ZooStateModel) => state[zooName].animals);
static pandas(zooName: string) {
return createSelector([ZooState.getZooAnimals(zooName)], (state: Animal[]) => {
return state.filter(animal => animal.type === 'panda' && animal.age === 'young');
static pandasWithoutMemoize(zooName: string) {
return createSelector([ZooState], (state: ZooStateModel) => {
return state[zooName].animals.filter(
animal => animal.type === 'panda' && animal.age === 'young'