The solution is to use cast:
import { cast } from "mobx-state-tree"
// .....
self.stores = cast(stores)
This is because MST enables snapshots to be assigned to actual values, and automatically converts them. This doesn’t just apply to arrays, but to all types of values. However, typescript doesn’t have support for an assignment to be more narrow that the thing it is being assigned to, which is the reason the cast is needed. cast
doesn’t do anything, but it helps TS to figure out that this assignment is valid