Your initial guess is correct, this code works:
type Fruit() =
member me.Test() = printfn "Test"
type Banana() =
inherit Fruit()
member me.Peel() = printfn "Peeling !"
let f = new Banana() :> Fruit
(f :?> Banana).Peel()
You are not showing how did you define those types, probably you have something wrong there.
Also keep in mind that in F# you have to be explicit to upcast. In your example your f
object is already a Banana
, nothing in your code upcast it to a Fruit
.