For anyone still facing this issue, here is my solution (based on @ceifard solution):
In the parent component TS:
someObj = new TestObj();
protected getObjCopy(obj){
return Object.create(obj);
}
In the parent component template:
<app-stuff [inputObj]="getObjCopy(someObj)"></app-stuff>
In AppStuffComponent TS:
ngOnChanges(changes: SimpleChanges){
console.log("Changes to inputObj detected !");
}
What is nice here is that we are able to use the properties and methods of someObj in AppStuffComponent. A possible drawback is the performances, I did not check precisely.