Array of subclass

Ok so you need to instantiate the abilities as objects.

Class/UClass/TSubclassOf types are just templates/descriptors of object types, but not actual objects.

In addition to your array of classes (which is basically the configuration), declare a second array for the instances :

UPROPERTY(EditAnywhere)
TArray<TSubclassOf<UAbility>> AbilitiesClasses;

UPROPERTY(Transient)
TArray<UAbility*> Abilities;

Then in something like PostInitializeComponents or BeginPlay (not in constructor!), instantiate the classes into objects :

voir APlayerEntity::BeginPlay()
{
    Super::BeginPlay();

    Abilities.Reserve(AbilitiesClasses.Num());
    for (const auto& Class : AbilitiesClasses)
    {
        UAbility* Ability = NewObject<UAbility>(this, Class);
        Abilities.Emplace(Ability);
    }
}

void APlayerEntity::CastAbility1()
{
    Abilities[0]->CastAbility();
}