josdejong/ducktype

Are recursive types supported?

Open

#40 opened on Jan 17, 2021

View on GitHub
 (5 comments) (0 reactions) (0 assignees)JavaScript (10 forks)github user discovery
enhancementhelp wanted

Repository metrics

Stars
 (92 stars)
PR merge metrics
 (PR metrics pending)

Description

Is it possible to define a type e.g. "segment" that is either a string, a number, or an array of segments (recursive definition)? If not, please consider it a feature request.

Something like:

const segment = ducktype.indirect();
segment.that = ducktype(String, Number, [segment]);

or even:

const segment = ducktype.recursive(self => ducktype(String, Number, [self]));

Basically I need to validate that all "leaves" of a non-flat array are of a particular union type. I cannot flatten the array before validating because it is nested in a bigger data structure that I want to validate as a whole (as opposed to picking these arrays out of it for flattening and validation), and the nesting structure within the array is meaningful.

Contributor guide