function fee() { var t: T; t.blah; // Error t.toString; // ok } function fee2() { var t: T; t.blah; // ok t.toString; // ok } function f(x: T) { x.children; x(); new x(); x[100]; x['hello']; } // Generic Tree structure type Tree = T & { children?: Tree[]; } class MyClass { public static displayTree1>(tree: T) { // error "Property 'children' does not exist on type 'T'" tree.children; } }