Created
September 13, 2017 14:36
-
-
Save chapko/2cdec0b737e7d87ff0020b2ef632fa4c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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