Skip to content

Instantly share code, notes, and snippets.

@glenjamin
Last active May 4, 2020 16:50
Show Gist options
  • Save glenjamin/75a96b45f4bb5c6ac221815d28c548dd to your computer and use it in GitHub Desktop.
Save glenjamin/75a96b45f4bb5c6ac221815d28c548dd to your computer and use it in GitHub Desktop.
Flow types for immutable records.
/* @flow */
import * as I from "immutable";
/**
* Define an immutable record intended for holding reducer state
* @param spec - the keys and their default values
* @return a state record factory function
*/
export function defineRecord<T: Object>(
name: string,
spec: T
): (init: $Shape<T>) => Record<T> {
return I.Record(spec, name);
}
export type Record<T: Object> = RecordMethods<T> & T;
declare class RecordMethods<T: Object> {
get<A>(key: $Keys<T>): A;
set<A>(key: $Keys<T>, value: A): Record<T>;
update<A>(key: $Keys<T>, updater: (value: A) => A): Record<T>;
updateIn<A>(path: Iterable<any>, notSetOrUpdater: A | (value: A) => A, updater?: (value: A) => A): Record<T>;
setIn<A>(path: Iterable<any>, value: A): Record<T>;
deleteIn<A>(path: Iterable<any>): Record<T>;
merge(values: $Shape<T>): Record<T>;
inspect(): string;
toObject(): T;
// add more as needed
}
@davidlygagnon
Copy link

davidlygagnon commented Jul 21, 2017

I'm also not able to get @ianwcarlson fix working. Has anyone been successful ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment