index.d.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. declare namespace mapObject {
  2. type Mapper<
  3. SourceObjectType extends {[key: string]: any},
  4. MappedObjectKeyType extends string,
  5. MappedObjectValueType
  6. > = (
  7. sourceKey: keyof SourceObjectType,
  8. sourceValue: SourceObjectType[keyof SourceObjectType],
  9. source: SourceObjectType
  10. ) => [MappedObjectKeyType, MappedObjectValueType];
  11. interface Options {
  12. /**
  13. Recurse nested objects and objects in arrays.
  14. @default false
  15. */
  16. deep?: boolean;
  17. /**
  18. Target object to map properties on to.
  19. @default {}
  20. */
  21. target?: {[key: string]: any};
  22. }
  23. interface DeepOptions extends Options {
  24. deep: true;
  25. }
  26. interface TargetOptions<TargetObjectType extends {[key: string]: any}> extends Options {
  27. target: TargetObjectType;
  28. }
  29. }
  30. /**
  31. Map object keys and values into a new object.
  32. @param source - Source object to copy properties from.
  33. @param mapper - Mapping function.
  34. @example
  35. ```
  36. import mapObject = require('map-obj');
  37. const newObject = mapObject({foo: 'bar'}, (key, value) => [value, key]);
  38. //=> {bar: 'foo'}
  39. ```
  40. */
  41. declare function mapObject<
  42. SourceObjectType extends object,
  43. TargetObjectType extends {[key: string]: any},
  44. MappedObjectKeyType extends string,
  45. MappedObjectValueType
  46. >(
  47. source: SourceObjectType,
  48. mapper: mapObject.Mapper<
  49. SourceObjectType,
  50. MappedObjectKeyType,
  51. MappedObjectValueType
  52. >,
  53. options: mapObject.DeepOptions & mapObject.TargetOptions<TargetObjectType>
  54. ): TargetObjectType & {[key: string]: unknown};
  55. declare function mapObject<
  56. SourceObjectType extends object,
  57. MappedObjectKeyType extends string,
  58. MappedObjectValueType
  59. >(
  60. source: SourceObjectType,
  61. mapper: mapObject.Mapper<
  62. SourceObjectType,
  63. MappedObjectKeyType,
  64. MappedObjectValueType
  65. >,
  66. options: mapObject.DeepOptions
  67. ): {[key: string]: unknown};
  68. declare function mapObject<
  69. SourceObjectType extends {[key: string]: any},
  70. TargetObjectType extends {[key: string]: any},
  71. MappedObjectKeyType extends string,
  72. MappedObjectValueType
  73. >(
  74. source: SourceObjectType,
  75. mapper: mapObject.Mapper<
  76. SourceObjectType,
  77. MappedObjectKeyType,
  78. MappedObjectValueType
  79. >,
  80. options: mapObject.TargetOptions<TargetObjectType>
  81. ): TargetObjectType & {[K in MappedObjectKeyType]: MappedObjectValueType};
  82. declare function mapObject<
  83. SourceObjectType extends {[key: string]: any},
  84. MappedObjectKeyType extends string,
  85. MappedObjectValueType
  86. >(
  87. source: SourceObjectType,
  88. mapper: mapObject.Mapper<
  89. SourceObjectType,
  90. MappedObjectKeyType,
  91. MappedObjectValueType
  92. >,
  93. options?: mapObject.Options
  94. ): {[K in MappedObjectKeyType]: MappedObjectValueType};
  95. export = mapObject;