Custom editor: Drawing generic properties

I want to display a generic property in the editor, but I can’t figure out how to do this without implementing a bunch of concrete classes for each of my generic implementations.

public abstract class ComponentModel<T> : ScriptableObject
    where T : Component
{
    public T Data { get; set; }
}

I’m trying to draw the Data field in the inspector. My attempt:

[CustomEditor(typeof(ComponentModel<>), true)]
public class ComponentModelEditor : UnityEditor.Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        var component = (ComponentModel<Component>)target;
        EditorGUILayout.ObjectField(component.Data, typeof(Component), false);
    }
}

Isn’t working. I don’t really know where to start looking to fix this.

Fixed this by having my generic class derive from a base class that contains the component. Interface would work too.

// Base
public abstract class ComponentModel : ScriptableObject
{
    public abstract Component Component { get; }
}

// Generic component
public class ComponentModel<T> : ComponentModel
[...]

// Editor
[CustomEditor(typeof(ComponentModel), true)]
public class ComponentModelEditor : UnityEditor.Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        
        GUI.enabled = false;
        Component component = ((ComponentModel)target).Component;
        EditorGUILayout.ObjectField(component , typeof(Component), false);
        GUI.enabled = true;
    }
}