interface Alpha { takesArgOfT(arg: T): Alpha; makeBetaOfNumber(): Beta; } interface Beta extends Alpha { } var alpha: Alpha; var betaOfNumber = alpha.makeBetaOfNumber(); betaOfNumber.takesArgOfT(5);