You cant just create an instance of an interface you have to create an instance of a class that implements that interface then you can cast that object to your interface type.
That is obvious Your solution is same as simply making type property type UClass. With such approach you get none of possible benefits like limitations for editor UI. So you will be able to set its value to some class which doesn’t implement interface at all.
Also TSubclassOf is type to store classes, not objects. So you can’t store UObject objects there, but you can store any type extending UObject so it’s same as simple UClass variable.
Anyway I am not trying to instantiate interface, I am trying to instantiate a type, passed from editor, limited to types implementing interface.
The problem you have is that I dont think there is an easy way to get a list of all types that implement an interface directly or inherit the interface from a base class. I do not think you can use the UCoordinateSystem wrapper type in this manner to filter your type list, but im no expert, and its not really clear what youre trying to do from your question.
The TSubclassOf member variable you have must use a type that is lowest common denominator of classes that implement ICoordinateSystem, I just gave UObject as an example, if there is no common base class then you will be stuck with UObject.
If you are able to obtain the type that is appropriate then you need to create an instance of it using NewObject and then do as I have indicated to populate the TScriptInterface.
You cant assign an object instance cast to your interface type straight to the TScriptInterface as it has an Interface component and an object component. You have to set both otherwise you get the UObject* error you mention.
IAimable* aimable = …
ayyyy.SetObject(reinterpret_cast<UObject*>(aimable)); //UInterface instances are always UObjects so this is safe
dude->startAim(ayyyy); //you then free to use that TScriptInterface object as you please