Rocky_Mountain_Vending/.pnpm-store/v10/files/85/8c1001c06f382f2139bd5f5340a69d3f10588e79d7379e385892ad81d619a0cb5bb116037de2f4fad3d6dcef529b510b2e503fd6e05f08eb132bd2c151c783
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

42 lines
1.4 KiB
Text

import type {IsTuple} from './is-tuple';
import type {UnknownArray} from './unknown-array';
import type {IfAny} from './if-any';
/**
Transforms a tuple into an object, mapping each tuple index to its corresponding type as a key-value pair.
Note: Tuple labels are [lost in the transformation process](https://stackoverflow.com/a/70398429/11719314). For example, `TupleToObject<[x: number, y: number]>` produces `{0: number; 1: number}`, and not `{x: number; y: number}`.
@example
```
type Example1 = TupleToObject<[number, string, boolean]>;
//=> { 0: number; 1: string; 2: boolean }
// Tuples with optional indices
type Example2 = TupleToObject<[number, string?, boolean?]>;
//=> { 0: number; 1?: string; 2?: boolean }
// Readonly tuples
type Example3 = TupleToObject<readonly [number, string?]>;
//=> { readonly 0: number; readonly 1?: string }
// Non-tuple arrays get transformed into index signatures
type Example4 = TupleToObject<string[]>;
//=> { [x: number]: string }
// Tuples with rest elements
type Example5 = TupleToObject<[number, string, ...boolean[]]>;
//=> { [x: number]: number | string | boolean; 0: number; 1: string }
// Tuple labels are not preserved
type Example6 = TupleToObject<[x: number, y: number]>;
//=> { 0: number; 1: number }
```
@category Array
*/
export type TupleToObject<TArray extends UnknownArray> = IfAny<TArray, any, {
[
Key in keyof TArray as Key & (`${number}` | (IsTuple<TArray> extends true ? never : number))
]: TArray[Key];
}>;