Да, легко предоставлять разные типы в зависимости от ввода. В качестве очень простого примера вы можете сделать что-то вроде:
let propType, propValue =
if somevariable then
typeof<int>, <@@ 1 @@>
else
typeof<string>, <@@ "test" @@>
let prop = ProvidedProperty("property", propType, GetterCode = fun [_] -> propValue)
Чтобы расширить это в соответствии с предложениями, которые вы предлагаете, вы можете определить весь метод получения в условном выражении:
let propType, propGetter =
if somevariable then
typeof<int>, fun [arg] -> <@@ %%arg : int @@>
else
typeof<string>, fun [arg] -> <@@ %%arg : string @@>
let prop = ProvidedProperty("property", propType, GetterCode = fun [_] -> propValue)
Однако учтите, что вам необходимо убедиться, что представление, для которого вы вызываете свойство, равно int
или string
соответственно. Также обратите внимание, что в отличие от выбранного вами имени (staticProp
), это не статические свойства, так как вы передаете получатель (arg
) получателю и не пометили ProvidedProperty
static.