Right, that’s not possible with @kwdef.
Then, manual dispatch with keywords is probably the best one can get, albeit a bit tedious if there are lots of combinations:
struct abc
a::Int
b::Int
c::Int
end
abc(; a=nothing, b=nothing, c=nothing) = __abc(a, b, c)
__abc(a::Number, b::Number, c::Nothing) = abc(Int(a), Int(b), 0)
__abc(a::Nothing, b::Number, c::Number) = abc(0, Int(b), Int(c))