type t1 = interface where TSelf: t1; function f: integer; end; //Ошибка: Невозможно инстанцировать, так как тип TSelf не реализует интерфейс t1 t2 = interface(t1) where TSelf: t2; // А если так то работает: // where TSelf: t1, t2; end; TClass = class(t2) public function f: integer; begin Result := 1; end; end; begin var obj := new TClass; assert(obj.f = 1); end.