UNPKG

ts-cast

Version:
10 lines (9 loc) 564 B
import { createCaster } from '../engine'; import { isATuple } from '../engine/guards'; const transformTuple = (schema) => (value, context, reportError) => { const casted = schema.map((caster, index) => caster(value[index], context ? `${context}[${index}]` : `#${index}`, reportError)); const last = value.length - 1; return casted.slice(0, last + 1); }; const tupleTypeName = (schema) => `[${schema.map(casterFn => casterFn.name).join(', ')}]`; export const tuple = (...schema) => createCaster(tupleTypeName(schema), isATuple, transformTuple(schema));