consider
interface C {}
class B<T, U> {}
function F(s: any) { return class G<T, U> extends s {} }
export class A extends F(B)<D, E> implements C {}
export class _A extends B<D, E> implements C {}
Expected:
implements on line 6 parses as implements_clause
Actual:
implements on line 6 parses as part of a binary_expression in the extends_clause

See also atom/language-typescript#57