type-utils.js 551 B

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