Skip to content

Instantly share code, notes, and snippets.

@chapko
Created September 13, 2017 14:36
Show Gist options
  • Save chapko/2cdec0b737e7d87ff0020b2ef632fa4c to your computer and use it in GitHub Desktop.
Save chapko/2cdec0b737e7d87ff0020b2ef632fa4c to your computer and use it in GitHub Desktop.
type Result = {} | undefined;
type Fn<TArg> = (value: TArg) => Result;
type MappedFn<TKeys extends string, TArg extends {}> = {
[K in TKeys]: Fn<TArg>;
};
type MappedInline<TKeys extends string, TArg extends {}> = {
[K in TKeys]: (value: TArg) => Result;
};
const mFn: MappedFn<'x' | 'y', number> = {
x: (n) => n,
y: (n) => undefined,
};
const mInline: MappedInline<'x' | 'y', number> = {
x: (n) => n,
y: (n) => undefined,
};
const fields: Array<'x' | 'y'> = ['x', 'y'];
const valueFn = fields.map((field) => {
const map = mFn[field]; // Fn<number>
const result = map(1); // Result
return result;
});
const valueInline = fields.map((field) => {
const map = mInline[field]; // ((value: number) => Result) | ((value: number) => Result)
const result = map(1); // {}
return result;
});
// ----------
type MaybeObject = {} | undefined;
const value: MaybeObject = undefined;
console.log(value.toString());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment