function one(this: number) {}
function two(this: number, a) {}
function three(this: number, ...a) {}
function four(this: number, a, b, ...c) {}
function five<T>(this: T) {}
type six = (this: number) => void;
type seven = (this: number, a: number) => void;
type eight = (this: number, ...a: any) => void;
type nine = <T>(this: T) => void;
type ten = {
  m1(this: string): void,
  m2(this: string, a: number): void,
  m3(this: string, ...a: any): void,
  m4<T>(this: T): void,
};
declare function eleven(this: number): void;
declare function twelve(this: string, a: number): void;
declare function thirteen(this: string, ...a: any): void;
declare function fourteen<T>(this: T): void;
declare class Fifteen {
  m1(this: string): void,
  m2(this: string, a: number): void,
  m3(this: string, ...a: any): void,
  m4<T>(this: T): void,
}
class Sixteen {
  m1(this: number) {}
  m2(this: number, a) {}
  m3(this: number, ...a) {}
  m4(this: number, a, b, ...c) {}
  m5<T>(this: T) {}
}
let seventeen = {
  m1(this: number) {},
  m2(this: number, a) {},
  m3(this: number, ...a) {},
  m4(this: number, a, b, ...c) {},
  m5<T>(this: T) {}
};