Как говорит gradbot, F # в настоящее время не выполняет неявное преобразование значений в интерфейсы при поиске членов.Кроме того, F # использует только явную реализацию интерфейса (как известно из C #), а не неявную реализацию , где члены не только скомпилированы как реализация интерфейса, но также и как обычные (непосредственно видимые)члены типа.
Помимо приведения, вы можете дублировать член в определении типа:
type DeltaTraveler() =
member v.GetData () = printf "hello"
interface Traveler with
member v.GetData () = v.GetData()
Кроме того, если вы просто хотите реализовать интерфейс, но не нуждаетесьчтобы добавить любые члены, вы можете использовать выражения объекта F # (которые являются более легкими):
let deltaTraveler() =
{ new Traveler with
member v.GetData () = printf "hello" }
// The function directly returns value of type 'Traveler'
let t = deltaTraveler()
t.GetData()