Faits : A. Le 3 février 1994, X._ (ci-après: X._ ou la bailleresse) a conclu avec A.Z._ et B.Z._, en tant que locataires, un contrat de bail à loyer portant sur une place de stationnement dans un parking souterrain au Grand-Lancy. Le loyer a été fixé à 110 fr. par mois, frais accessoires compris. Le 6 septembre 2016, la bailleresse a mis en demeure A.Z._ de payer dans les trente jours 2'898 fr. à titre de loyers impayés pour la période du 1 er novembre 2014 au 30 septembre 2016 et l'a informé qu'à défaut de paiement dans le délai imparti, elle résilierait le bail conformément à l'art. 257d CO. Faute de paiement à l'échéance du délai fixé, la bailleresse a résilié le bail pour le 30 novembre 2016 par avis officiel du 17 octobre 2016. Le congé a été notifié à A.Z._ exclusivement. B. Par requête en protection dans les cas clairs déposée le 20 avril 2017, X._ a requis du Tribunal des baux et loyers du canton de Genève l'évacuation de A.Z._ et l'exécution forcée du jugement d'évacuation; elle demandait qu'il soit ordonné immédiatement l'exécution du jugement d'évacuation, en enjoignant à tout huissier judiciaire, le cas échéant en requérant le concours de la force publique, d'évacuer A.Z._ ainsi que tout tiers et tout bien de la place de stationnement. En outre, la bailleresse a conclu à ce que A.Z._ soit condamné au paiement des arriérés de loyers par 3'787 fr.20 et d'indemnités pour occupation illicite de 126 fr. par mois du 1 er mai 2017 jusqu'à la libération et la restitution totale de la place de stationnement. Par jugement du 23 juin 2017, le Tribunal des baux et loyers a déclaré la requête irrecevable (art. 257 al. 3 CPC). Il a jugé que les conditions permettant l'application de la procédure sommaire dans les cas clairs (art. 257 al. 1 CPC) n'étaient pas remplies. D'une part, la validité de la résiliation signifiée à A.Z._ seul, à l'exclusion de B.Z._, était sujette à caution. D'autre part, la bailleresse était dans l'incapacité de produire des documents contractuels justifiant la perception du loyer de 126 fr. par mois qu'elle réclamait, en lieu et place de celui de 110 fr. figurant dans le contrat de bail. Par arrêt du 27 novembre 2017, la Chambre des baux et loyers de la Cour de justice du canton de Genève a rejeté le recours dont la bailleresse l'avait saisie. C. X._ interjette un recours constitutionnel subsidiaire. A titre principal, elle demande au Tribunal fédéral d'annuler l'arrêt cantonal, puis de statuer sur le fond en admettant les conclusions qu'elle avait formulées en instance cantonale. L'intimé ne s'est pas déterminé sur le recours. La cour cantonale se réfère aux considérants de son arrêt.