@dareharu/utilities
Version:
Common JavaScript utilities for Dareharu project
34 lines (32 loc) • 1.14 kB
TypeScript
/**
* Creates a new object that assigned each value of the given array into property key and value.
*
* @param {string[]} keys The array to assign each value into property key and value
* @since 0.1.0
* @example
* ```typescript
* const ChatInputId = keyMirror(['Ticket', 'Message']);
*
* assert.equal(ChatInputId.Ticket, 'Ticket');
* assert.equal(ChatInputId.Message, 'Message');
* ```
* @example
* ```typescript
* const PropertyId = {
* ...keyMirror(['Create', 'Delete'], 'Ticket'),
* ...keyMirror(['Send', 'Receive'], 'Message')
* };
*
* assert.equal(PropertyId.TicketCreate, 'TicketCreate');
* assert.equal(PropertyId.TicketDelete, 'TicketDelete');
* assert.equal(PropertyId.MessageSend, 'MessageSend');
* assert.equal(PropertyId.MessageReceive, 'MessageReceive');
* ```
*/
declare function keyMirror<T extends ReadonlyArray<string>, Prefix extends string = '', Suffix extends string = ''>(keys: Readonly<T> | [...T], { prefix, suffix }?: Partial<{
prefix: Prefix;
suffix: Suffix;
}>): Readonly<{
[P in T[number] as `${Prefix}${P}${Suffix}`]: `${Prefix}${P}${Suffix}`;
}>;
export { keyMirror };