How to implement TypeScript deep partial mapped type not breaking array properties How to implement TypeScript deep partial mapped type not breaking array properties typescript typescript