Rust pro tip: use type alias.
As for using lock() - you'd have to do it in any language in some way. If you have sharing and mutability, you need some kind of synchronization.
You don’t need full synchronization if you’re not going cross threads. RefCell and the like don’t use atomic operations or barriers or anything fancy like that.