1 | export function union(types) {
|
2 | return [...new Set(types)].join(' | ')
|
3 | }
|
4 |
|
5 | export function unionValues(values) {
|
6 | return union(values.map(forValue))
|
7 | }
|
8 |
|
9 | export function forKeys(value) {
|
10 | return union(Object.keys(value).map((key) => `'${key}'`))
|
11 | }
|
12 |
|
13 | export function forValue(value) {
|
14 | if (Array.isArray(value)) {
|
15 | return `(${unionValues(value)})[]`
|
16 | }
|
17 |
|
18 | if (typeof value === 'object') {
|
19 | return `Record<${forKeys(value)}, ${unionValues(Object.values(value))}>`
|
20 | }
|
21 |
|
22 | if (typeof value === 'string') {
|
23 | return `string`
|
24 | }
|
25 |
|
26 | return `any`
|
27 | }
|