UNPKG

551 BJavaScriptView Raw
1export function union(types) {
2 return [...new Set(types)].join(' | ')
3}
4
5export function unionValues(values) {
6 return union(values.map(forValue))
7}
8
9export function forKeys(value) {
10 return union(Object.keys(value).map((key) => `'${key}'`))
11}
12
13export 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}