extracted writing values to separate interface
This supports values that are read only, and also allows specifying non-nullable write types with nullable read types.