Overloading by number of arguments is supported without issue.
Arbitrary member overloading by type is supported through an thinly documented feature called "OverloadID". F# simply asks that a unique name be given for each overload that is ambiguous by name and number of arugments - strictly speacking this should not be necessary once a full type signature has been given, but it is necessary in the case of inferred signatures.
At some point we will simply require that these sorts of overloads are given full type signatures, when the OverloadID will then become redundant and ignored, and possibly deprecated in some v2.0 of the language.
Anyway, to use this, simply add the OverloadID attribute to each member, giving a different qualifying name in each case. These names must be identical if you also give a signature.
type ITest = interface
[<OverloadID("Item.get.Int")>]
abstract Item : int -> float with get
[<OverloadID("Item.get.string")>]
abstract Item : string -> float with get
end
And from prim-types.fsi:
/// Adding the OverloadID attribute to a member permits it to
/// be part of a group overloaded by the same name and arity. The string
/// must be a unique name amongst those in the overload set. Overrides
/// of this method, if permitted, must be given the same OverloadID,
/// and the OverloadID must be specified in both signature and implementation
/// files if signature files are used.
type OverloadIDAttribute =
class
inherit System.Attribute
val v: string
new : string -> OverloadIDAttribute
end