Вы можете указать это, имея общий тип 'T
с ограничениями, ограничивающими 'T
типами, которые реализуют требуемые интерфейсы.
Например, с учетом следующих двух интерфейсов:
type IFoo =
abstract Foo : int
type IBar =
abstract Bar : int
Я могу написать функцию, требующую 'T
, которая равна IFoo
, а также IBar
:
let foo<'T when 'T :> IFoo and 'T :> IBar> (foobar:'T) =
foobar.Bar + foobar.Foo
Теперь я могу создать конкретный класс, реализующий оба интерфейса, и передать его моему foo
функция:
type A() =
interface IFoo with
member x.Foo = 10
interface IBar with
member x.Bar = 15
foo (A()) // Type checks and returns 25