Closed GorvGoyl closed 1 month ago
@GorvGoyl Hi,
This part of the API is a little bit in flux currently, however you can import the TransformDecode
function which performs the interior decode op, but not the check. You can wire this up into a custom Parse function as follows (which should tree shake for other functionality)
import { Type, TSchema, StaticDecode } from '@sinclair/typebox'
import { Check, TransformDecode } from '@sinclair/typebox/value'
import { Errors } from '@sinclair/typebox/errors'
const T = Type.Object({
x: Type.Number(),
y: Type.Number(),
z: Type.Number()
})
export function Parse<T extends TSchema, D = StaticDecode<T>>(schema: T, value: unknown): D {
if(!Check(schema, value)) throw new Error('Invalid value', { cause: Errors(schema, value).First() })
return TransformDecode(schema, [], value) as D
}
const value = Parse(T, { x: 1, y: 2, z: 3 })
console.log(value)
The TransformDecode function is currently treated as an internal function but would like to promote this API as the preferred Decode function in later revisions. The function returns unknown
(so you need to type assert the return value) and expects the value to be checked before calling it (as above).
Hope this helps S
@GorvGoyl Hiya,
Might close off this issue. As above you can import TransformDecode which should provide the functionality you need, just be sure to Check the value prior to calling the function.
If you have any follow up questions, feel free to ping on this thread
Cheers S
Thanks. this seems a bit much for such common use case. Would you consider providing one simple function to achieve this?
Thanks. this seems a bit much for such common use case. Would you consider providing one simple function to achieve this?
Yes, I'm planning to sort this out on the next minor revision.
Is there a way to just use Decode for better tree shaking?
I tried importing like this but it gave build error: