UNPKG

ts-cast

Version:
11 lines (10 loc) 744 B
import { createCaster } from '../engine'; import { isAnObj } from '../engine/guards'; const recordTypeName = (keyTypeName, valueTypeName) => `Record<${keyTypeName}, ${valueTypeName}>`; const checkFields = (keyCaster, valueCaster) => (value, context, reportError) => Object.entries(value).reduce((obj, [key, val]) => { const newKey = keyCaster(key, context ? `key of ${context}` : 'key', reportError); const newValue = valueCaster(val, context ? `${context}.${key}` : key, reportError); obj[newKey] = newValue; return obj; }, Object.create(null)); export const record = (keyCaster, valueCaster, typeName = recordTypeName(keyCaster.name, valueCaster.name)) => createCaster(typeName, isAnObj, checkFields(keyCaster, valueCaster));