**TypeScript Version:** 2.1.5 **Code** ```ts interface DataSnapshot { child(path: string): DataSnapshot; } interface Snapshot<T> extends DataSnapshot { child<U extends keyof T>(path: U): Snapshot<T[U]>; } ``` **Expected behavior:** Should compile. **Actual behavior:** Gives error: > Excessive stack depth comparing types 'Snapshot<T>' and 'DataSnapshot'. [2321] If the definition of `DataSnapshot#child` is changed to `child(path:string): any; `, then no error occurs.