• A decoder that succeeds only if all provided decoders succeed.

    Type Parameters

    Parameters

    • decoders: T

      Array of decoders to try in sequence

    • decoderName: string

      How to display the name of the object being decoded in errors

    Returns Decoder<UnionToIntersection<DecoderOutput<T[number]>>>

    A decoder that tries each decoder in sequence until all succeed

     type User = { firstname: string; lastname: string; role: 'admin' | 'user'; };
    const firstnameDecoder = JsonDecoder.object({ firstname: JsonDecoder.string() }, '{firstname: string}');
    const lastnameDecoder = JsonDecoder.object({ lastname: JsonDecoder.string() }, '{lastname: string}');
    const roleDecoder = JsonDecoder.oneOf([JsonDecoder.literal('admin'), JsonDecoder.literal('user')], 'admin | user');
    const userDecoder: Decoder<User> = JsonDecoder.allOf(
    [firstnameDecoder, lastnameDecoder, JsonDecoder.object({ role: roleDecoder }, 'role')],
    'User'
    );
    userDecoder.decode({ firstname: 'John', lastname: 'Doe', role: 'admin' }); // Ok<User>({value: { firstname: 'John', lastname: 'Doe', role: 'admin' }})
    userDecoder.decode({ firstname: 'John' }); // Err({error: '<User> allOf decoder failed at index #1 with <{lastname: string}> decoder failed at key "lastname" with error: undefined is not a valid string'})