export function generatePropCombinations

(values: { [K in keyof P]: ReadonlyArray }) { return generatePropCombinationsRecursive(values) as P[] } function generatePropCombinationsRecursive( value: Record, ): Array> { const [key] = Object.keys(value) if (!key) return [{}] const { [key]: values = [], ...otherValues } = value const result: Array> = [] for (const value of values) { for (const otherValue of generatePropCombinationsRecursive(otherValues)) { result.push({ [key]: value, ...otherValue }) } } return result }