cc @ahejlsberg **TypeScript Version:** 2.7.0-dev.20180210 <!-- Search terms you tried before logging this (so others can find this issue more easily) --> **Search Terms:** **Code** ```ts type OldDiff<T extends string, U extends string> = ( & { [P in T]: P; } & { [P in U]: never; } & { [x: string]: never; } )[T]; type NewDiff<T, U> = T extends U ? never : T; interface A { a: 'a'; } interface B1 extends A { b: 'b'; c: OldDiff<keyof this, keyof A>; } interface B2 extends A { b: 'b'; c: NewDiff<keyof this, keyof A>; } type c1 = B1['c']; // 'c' | 'b' type c2 = B2['c']; // 'c' | 'a' | 'b' ``` **Expected behavior:** `c2` is `'c' | 'b'`. **Actual behavior:** `c2` is `'c' | 'a' | 'b'`. **Playground Link:** <!-- A link to a TypeScript Playground "Share" link which demonstrates this behavior --> **Related Issues:**
Activity
falsandtru commentedon Feb 12, 2018
Anders Hejlsberg (@ahejlsberg) Is this not a bug?
ahejlsberg commentedon Feb 12, 2018
falsandtru (@falsandtru) Don't know yet, haven't had time to look.
falsandtru commentedon Feb 12, 2018
I see.