When would it be valid for the `target` or `keyPath` to be empty? Should these be assertions instead?