Using a `new` constructor with Parameters.jl `@with_kw`

That is not the most common view. Inner constructions are the exception, not the rule.

You can just put them in a begin... end block, as suggested by the error message.

Anyway, both these are styling choices, you are not really limited by the functionality. But you can use an inner constructor without the keyword arguments, if you want:

julia> @with_kw struct Pet
           name
           kind
           age
           Pet(c::Cat) = new(c.name, typeof(c), c.age)
       end

julia> c = Cat("None", "Black", 5, 5.0, "John")
Cat("None", "Black", 5, 5.0, "John")

julia> Pet(c)
Pet
  name: String "John"
  kind: Cat <: Any
  age: Int64 5