// tricky interface interface Settable { set(value: V): T; } // implement class Identity implements Settable, V> { readonly item: V; constructor(value: V) { this.item = value; } public set(value: V): Identity { return new Identity(value); } } // generic parameter default interface Test1 = Identity> { }; let test1: Test1; // not generic parameter default interface Test2Base> { }; type Test2 = Test2Base>; let test2: Test2;