def METHOD_NAME(schema: Schema) -> TypeScriptElement:
    """Parse an OpenAPI schema object recursively to create typescript types.
    Args:
        schema: An OpenAPI Schema object.
    Returns:
        A typescript type.
    """
    if schema.all_of:
        return TypeScriptIntersection(tuple(METHOD_NAME(s) for s in schema.all_of if is_schema_value(s)))
    if schema.one_of:
        return TypeScriptUnion(tuple(METHOD_NAME(s) for s in schema.one_of if is_schema_value(s)))
    if is_schema_value(schema.items):
        return TypeScriptArray(METHOD_NAME(schema.items))
    if schema.type == OpenAPIType.OBJECT:
        return create_interface(
            properties={k: v for k, v in schema.properties.items() if is_schema_value(v)} if schema.properties else {},
            required=set(schema.required) if schema.required else None,
        )
    return parse_type_schema(schema=schema)