Faits :
A.
Par jugement du 12 octobre 2018, le Tribunal correctionnel de l'arrondissement de la Broye et du Nord vaudois a condamné X._, pour recel, brigandage, dommages à la propriété d'importance mineure, violation de domicile et contravention à la LStup. Il a révoqué le sursis qui lui avait été accordé le 8 mai 2015 et a prononcé une peine privative de liberté d'ensemble de 30 mois. Le tribunal a encore ordonné son expulsion du territoire suisse pour une durée de huit ans.
B.
Par jugement du 2 avril 2019, la Cour d'appel pénale du Tribunal cantonal du canton de Vaud a rejeté l'appel de X._ ainsi que l'appel joint formé par le ministère public contre ce jugement et a confirmé celui-ci.
La cour cantonale a retenu les faits suivants.
B.a. X._ est né en 1996 au Tchad, pays dont il est ressortissant. Il y a grandi entouré de son grand-père paternel, de son frère, de sa soeur et de ses cousins, jusqu'à son arrivée en Suisse en 2008. Il a rejoint, dans ce pays, son père et sa mère, lesquels avaient quitté le Tchad lorsqu'il était âgé de 2, respectivement de 9 ou 10 ans. En Suisse, X._ a suivi l'école jusqu'à l'âge de 16 ou 17 ans, après quoi il a entrepris un pré-apprentissage. Au terme d'une période d'inactivité de plusieurs mois, il a trouvé un apprentissage comme logisticien mais n'a pu dépasser le temps d'essai en raison de son incapacité à se lever le matin. L'intéressé a, par la suite, débuté un nouvel apprentissage, qui s'est interrompu après une année. Il est depuis demeuré inactif.
Par arrêt du 22 mars 2017, la Cour de droit administratif et public du Tribunal cantonal vaudois a rejeté le recours formé par X._ contre la décision du Service de la population ayant refusé la prolongation de son autorisation de séjour et ordonné son renvoi de Suisse.
Le casier judiciaire de X._ fait état d'une condamnation, en 2015, pour tentative de vol, vol, tentative de brigandage avec arme, dommages à la propriété, violation de domicile, contravention à la LStup et actes préparatoires délictueux, d'une condamnation, en 2016, pour vol et violation de domicile, ainsi que d'une condamnation, la même année, pour vol, violation de domicile, recel et contravention à la LStup.
B.b. Entre le mois de mai et la fin 2016, à A._, X._ a acquis auprès d'un inconnu un téléphone portable dont il savait qu'il provenait d'une infraction contre le patrimoine.
B.c. En juin 2016, à A._, le prénommé a acquis auprès d'un inconnu un téléphone portable dont il savait qu'il provenait d'une infraction contre le patrimoine.
B.d. Le 17 avril 2017, à B._, X._ et C._ ont abordé un groupe de jeunes gens. Le premier nommé leur a demandé s'ils possédaient de la marijuana. Face à une réponse négative, X._ a empoigné D._ par la chaîne qu'il portait au cou et l'a fait s'asseoir sur un banc. Aidé par son comparse, il a fait de même avec les autres membres du groupe. Il a ensuite demandé aux jeunes gens de vider leurs poches. D._ ayant refusé par deux fois, X._ lui a asséné un coup de poing au visage. L'intéressé s'est alors levé et a, à son tour, frappé ce dernier. C._ a ensuite administré à D._ un coup de pied dans les côtes et le prénommé s'est rassis. X._ a demandé à son comparse de sortir un spray au poivre dont tous deux s'étaient munis lors de leur départ pour B._. A ce moment, D._ a pris la fuite mais a été rattrapé par X._, qui l'a saisi par la veste, déchirant ce vêtement. Les deux intéressés se sont battus, avant que C._ frappe D._ avec le spray au poivre et lui administre une giclée de son contenu. Ce dernier est par la suite parvenu à fuir mais a été intercepté par un tiers. X._ l'a rejoint, armé d'un couteau suisse, et lui a dit : "ferme ta gueule et marche". D._ est donc retourné vers ses amis et X._ lui a derechef demandé de vider ses poches. Le dernier nommé a ensuite palpé l'intéressé et a voulu le frapper avec la main qui tenait le couteau, occasionnant une blessure superficielle à la main de D._. X._ a également voulu lui porter un coup de pied à la tête, mais D._ a pu parer la frappe. Pendant ce temps, C._ a vidé les poches de la veste du prénommé. Comme un éducateur est alors arrivé à proximité du groupe, X._ et son comparse ont pris la fuite en emportant les divers effets découverts dans les poches de la veste de D._.
B.e. Le 18 mai 2017, à A._, X._ et E._ se sont rendus à la rue F._ avec l'intention d'y commettre un vol, le second nommé ayant entendu dire que l'occupant d'un appartement ne fermait pas celui-ci à clé. Comme la porte de l'immeuble était fermée, les deux intéressés ont contacté un tiers pour lui demander de leur procurer un tournevis. Munis de cet objet, ils ont réussi à s'introduire dans l'immeuble puis dans l'appartement visé, où ils ont commencé à s'emparer de divers objets. Surpris peu après par l'occupant des lieux qui rentrait chez lui, X._ a déconseillé à ce dernier d'appeler la police puis l'a attrapé et secoué. Les deux hommes ont basculé sur le canapé et X._ a tenté d'asséner des coups de poing à son adversaire, avant de demander à E._ le tournevis qu'il tenait dans sa main. Voyant X._ muni de cet outil, l'occupant des lieux a pris peur et a dit qu'il n'appellerait pas la police. X._ et E._ lui ont ordonné de s'enfermer dans sa chambre mais, alors qu'il s'y rendait, une nouvelle empoignade avec le premier nommé est survenue. X._ lui a demandé de lui donner son argent, avant de le pousser. Les deux comparses ont ensuite pris la fuite avec leur butin.
B.f. Entre octobre 2016 et le 18 mai 2017, X._ a fumé de la marijuana à raison d'une dizaine de "joints" par jour. Il a également consommé occasionnellement des stupéfiants durant sa détention.
C.
X._ forme un recours en matière pénale au Tribunal fédéral contre le jugement du 2 avril 2019, en concluant principalement à sa réforme en ce sens que son expulsion du territoire suisse n'est pas ordonnée et, subsidiairement, à son annulation et au renvoi de la cause à l'autorité précédente pour nouvelle décision. Il sollicite par ailleurs le bénéfice de l'assistance judiciaire.
Considérant en droit :
1.
Le recourant reproche à l'autorité précédente d'avoir ordonné son expulsion du territoire suisse.
1.1. Aux termes de l'art. 66a al. 1 let. c CP, le juge expulse de Suisse l'étranger qui est notamment condamné pour brigandage, quelle que soit la quotité de la peine prononcée à son encontre, pour une durée de cinq à quinze ans. Selon l'art. 66a al. 2 CP, le juge peut exceptionnellement renoncer à une expulsion lorsque celle-ci mettrait l'étranger dans une situation personnelle grave et que les intérêts publics à l'expulsion ne l'emportent pas sur l'intérêt privé de l'étranger à demeurer en Suisse. A cet égard, il tiendra compte de la situation particulière de l'étranger qui est né ou qui a grandi en Suisse.
En l'espèce, le recourant a commis des infractions de brigandage qui tombent sous le coup de l'art. 66a al. 1 let. c CP. Il remplit donc a priori les conditions d'une expulsion, sous la réserve d'une application de l'art. 66a al. 2 CP, voire également des normes de droit international.
1.2. Les conditions pour appliquer l'art. 66a al. 2 CP sont cumulatives. Afin de pouvoir renoncer à une expulsion prévue par l'art. 66a al. 1 CP, il faut, d'une part, que cette mesure mette l'étranger dans une situation personnelle grave et, d'autre part, que les intérêts publics à l'expulsion ne l'emportent pas sur l'intérêt privé de l'étranger à demeurer en Suisse. Le juge doit faire usage du pouvoir d'appréciation qui lui est conféré par une norme potestative dans le respect des principes constitutionnels. S'il devait refuser de renoncer à l'expulsion alors que les conditions de la clause de rigueur sont remplies, le principe de proportionnalité ancré à l'art. 5 al. 2 Cst. serait violé. Le juge doit ainsi renoncer à l'expulsion lorsque les conditions de l'art. 66a al. 2 CP sont réunies, conformément au principe de proportionnalité (ATF 144 IV 332 consid. 3.3 p. 339 s.).
1.3.
1.3.1. La loi ne définit pas ce qu'il faut entendre par une "situation personnelle grave" (première condition cumulative) ni n'indique les critères à prendre en compte dans la pesée des intérêts (seconde condition cumulative).
En recourant à la notion de cas de rigueur dans le cadre de l'art. 66a al. 2 CP, le législateur a fait usage d'un concept ancré depuis longtemps dans le droit des étrangers. Compte tenu également du lien étroit entre l'expulsion pénale et les mesures du droit des étrangers, il est justifié de s'inspirer, de manière générale, des critères prévus par l'art. 31 al. 1 de l'ordonnance relative à l'admission, au séjour et à l'exercice d'une activité lucrative (OASA; RS 142.201) et de la jurisprudence y relative, dans le cadre de l'application de l'art. 66a al. 2 CP. L'art. 31 al. 1 OASA prévoit qu'une autorisation de séjour peut être octroyée dans les cas individuels d'extrême gravité. Elle commande de tenir compte notamment de l'intégration du requérant, du respect de l'ordre juridique suisse par le requérant, de la situation familiale, particulièrement de la période de scolarisation et de la durée de la scolarité des enfants, de la situation financière ainsi que de la volonté de prendre part à la vie économique et d'acquérir une formation, de la durée de la présence en Suisse, de l'état de santé ainsi que des possibilités de réintégration dans l'Etat de provenance. Comme la liste de l'art. 31 al. 1 OASA n'est pas exhaustive et que l'expulsion relève du droit pénal, le juge devra également, dans l'examen du cas de rigueur, tenir compte des perspectives de réinsertion sociale du condamné (ATF 144 IV 332 consid. 3.3.2 p. 340 s.; arrêt 6B_598/2019 du 5 juillet 2019 consid. 4.3.1). En règle générale, il convient d'admettre l'existence d'un cas de rigueur au sens de l'art. 66a al. 2 CP lorsque l'expulsion constituerait, pour l'intéressé, une ingérence d'une certaine importance dans son droit au respect de sa vie privée et familiale garanti par la Constitution fédérale (art. 13 Cst.) et par le droit international, en particulier l'art. 8 CEDH (arrêts 6B_598/2019 précité consid. 4.3.1; 6B_143/2019 du 6 mars 2019 consid. 3.3.1; 6B_1329/2018 du 14 février 2019 consid. 2.3.1).
Par ailleurs, dans l'appréciation du cas de rigueur, l'art. 66a al. 2, 2ème phrase, CP impose expressément de prendre en considération la situation particulière de l'étranger qui est né ou qui a grandi en Suisse. La jurisprudence rendue en droit des étrangers retient que la révocation de l'autorisation d'établissement d'un étranger qui séjourne depuis longtemps en Suisse doit se faire avec une retenue particulière, mais n'est pas exclue en cas d'infractions graves ou répétées, même en présence d'un étranger né en Suisse et qui y a passé l'entier de sa vie. On tiendra alors particulièrement compte de l'intensité des liens de l'étranger avec la Suisse et des difficultés de réintégration dans son pays d'origine. Un étranger qui est né ou a grandi en Suisse dispose d'un intérêt privé important à y demeurer, ledit intérêt devant être pris en compte dans le cadre de la pesée des intérêts (ATF 144 IV 332 consid. 3.3.3 p. 341 s.).
1.3.2. Selon la jurisprudence, pour se prévaloir du respect au droit de sa vie privée, l'étranger doit établir l'existence de liens sociaux et professionnels spécialement intenses avec la Suisse, notablement supérieurs à ceux qui résultent d'une intégration ordinaire. Le Tribunal fédéral n'adopte pas une approche schématique qui consisterait à présumer, à partir d'une certaine durée de séjour en Suisse, que l'étranger y est enraciné et dispose de ce fait d'un droit de présence dans notre pays. Il procède bien plutôt à une pesée des intérêts en présence, en considérant la durée du séjour en Suisse comme un élément parmi d'autres et en n'accordant qu'un faible poids aux années passées en Suisse dans l'illégalité, en prison ou au bénéfice d'une simple tolérance (cf. ATF 134 II 10 consid. 4.3 p. 24; plus récemment arrêt 6B_598/2019 précité consid. 4.3.2 et les références citées).
En l'espèce, il est douteux que le recourant puisse se prévaloir d'un droit au respect de sa vie privée et familiale, au sens de l'art. 8 par. 1 CEDH, dès lors qu'il ne présente pas des liens sociaux ou professionnels spécialement intenses avec la Suisse et que son intégration dans ce pays n'est pas particulièrement forte. Il ressort du jugement attaqué que ses seuls liens tangibles avec la Suisse sont ceux qu'il entretient avec ses parents, son frère et sa soeur dans ce pays. Or, les relations visées par l'art. 8 CEDH sont avant tout celles qui concernent la famille dite nucléaire, soit celles qui existent entre époux ainsi qu'entre parents et enfants mineurs vivant en ménage commun (cf. ATF 144 II 1 consid. 6.1 p. 12; 135 I 143 consid. 1.3.2 p. 146). Il n'apparaît pas qu'il existerait, entre le recourant et l'un des membres de sa famille précité, un rapport de dépendance particulier, par exemple en raison d'une maladie ou d'un handicap (cf. ATF 137 I 154 consid. 3.4.2 p. 159; arrêts 2C_72/2019 du 7 juin 2019 consid. 6.1; 6B_1329/2018 précité consid. 2.3.2), duquel l'intéressé pourrait déduire une protection fondée sur l'art. 8 par. 1 CEDH. Ainsi, seul un droit au respect de sa vie privée fondé sur les années passées en Suisse, en particulier durant sa minorité, pourrait éventuellement être invoqué.
Quoi qu'il en soit, à supposer que le recourant puisse se prévaloir d'un droit découlant de l'art. 8 par. 1 CEDH, son expulsion pourrait de toute manière être confirmée au regard de l'art. 8 par. 2 CEDH (cf. consid. 1.4.2 infra).
1.4. Il convient de déterminer si l'intérêt privé du recourant à demeurer en Suisse pourrait l'emporter sur les intérêts publics présidant à son expulsion. Cet examen implique en particulier de déterminer si la mesure litigieuse respecte le principe de la proportionnalité découlant des art. 5 al. 2 Cst. et 8 par. 2 CEDH (cf. arrêt 6B_1329/2018 précité consid. 2.4 et les références citées).
1.4.1. La cour cantonale a exposé que le recourant avait grandi dans son pays jusqu'à l'âge de 12 ans et que ses seuls liens avec la Suisse étaient ceux qu'il entretenait dans ce pays avec ses parents, son frère et sa soeur. Elle a relevé que le recourant ne disposait d'aucune formation professionnelle ni ne s'était jamais intégré dans le monde du travail. Celui-ci n'avait que peu travaillé mais avait en revanche déployé une intense activité délictueuse, puisqu'il avait été condamné à trois reprises entre 2015 et 2016. Malgré une condamnation à une peine privative de liberté de 22 mois avec sursis en 2015, l'intéressé n'avait pas pris conscience de la gravité de ses actes et avait continué à vivre en marge de la société, avant de se retrouver en situation de récidive spéciale. L'intérêt public à son expulsion était ainsi élevé. D'un point de vue administratif, le renvoi du recourant avait été ordonné. Celui-ci parlait et comprenait la langue de son pays d'origine, où il avait d'ailleurs vécu plus longtemps qu'en Suisse. Il lui serait donc possible de s'y réinsérer, d'autant qu'il y avait encore de nombreux membres de sa famille.
1.4.2. En l'espèce, les intérêts présidant à l'expulsion du recourant sont importants, dès lors que celui-ci a commis des brigandages en s'attaquant physiquement à des tiers et que ses antécédents démontrent une propension à s'adonner de manière continue à la délinquance et à violer l'ordre juridique suisse sans tenir compte des sanctions prononcées.
Le recourant est certes arrivé en Suisse dès l'âge de 12 ans, mais son intégration y est médiocre puisqu'il ne peut se prévaloir d'aucune formation ni expérience professionnelle sérieuse, l'intéressé ne revendiquant pour le reste aucune participation particulière à la vie sociale. Rien ne permet de considérer que le recourant se réintégrerait plus difficilement au Tchad - où il possède de la famille - qu'en Suisse, où il ne parvient pas à trouver sa place dans la société. Le temps écoulé depuis la commission des infractions n'est pas important. Il ne ressort par ailleurs pas du jugement attaqué que le comportement du recourant durant cette période aurait été particulièrement bon, celui-ci ayant d'ailleurs consommé des stupéfiants durant sa détention.
Le recourant n'explique pas en quoi la pesée des intérêts opérée par la cour cantonale serait inadéquate, mais souligne des éléments qui y ont pourtant expressément été pris en compte, comme la durée de son séjour en Suisse, l'âge d'arrivée dans ce pays ou encore la présence de divers membres de sa famille. L'intéressé se prévaut par ailleurs de l'âge qu'il avait au moment de la commission des infractions. Il apparaît toutefois que les brigandages commis ne peuvent être regardés comme constitutifs d'un simple écart de jeunesse, puisque l'intéressé avait déjà été sanctionné, en 2015, notamment pour une tentative de brigandage avec arme. Pour le reste, le recourant formule des voeux d'intégration professionnelle et sociale en Suisse, sans que l'on perçoive en quoi sa situation devrait désormais permettre d'envisager avec une confiance particulière l'acquisition d'une formation qu'il a par le passé échoué à concrétiser, quand bien même il pourrait se prévaloir d'une promesse de stage et d'une perspective d'hébergement au sein de sa famille. On relèvera que celui-ci ne dispose de toute manière plus d'une autorisation de séjour en Suisse. Enfin, l'intéressé proteste d'une réelle prise de conscience, qui ne saurait toutefois être admise dès lors qu'il minimise par ailleurs la gravité de ses actes, en résumant ses brigandages à "un échange de coups entre la victime et le recourant", respectivement à "une tentative de coup de poing, la victime ayant été ici pour l'essentiel retenue, poussée et chahutée".
En définitive, compte tenu de la gravité des infractions sanctionnées, de la propension du recourant à s'en prendre aux biens d'autrui - y compris par la violence - et de son intégration médiocre en Suisse, l'intérêt public à l'expulsion l'emporte sur l'intérêt privé de l'intéressé à demeurer dans ce pays. Il n'apparaît pas que le recourant se trouvera au Tchad dans une situation sensiblement plus défavorable qu'en Suisse. Dans ces circonstances, l'expulsion s'avère conforme au principe de la proportionnalité.
1.5. La seconde condition pour l'application de l'art. 66a al. 2 CP n'étant pas réalisée, la cour cantonale n'a pas violé le droit fédéral, constitutionnel ou international en ordonnant l'expulsion du recourant pour une durée de huit ans.
2.
Le recours doit être rejeté. Comme il était dénué de chances de succès, la demande d'assistance judiciaire doit être rejetée (art. 64 al. 1 LTF). Le recourant, qui succombe, supportera les frais judiciaires (art. 66 al. 1 LTF), dont le montant sera fixé en tenant compte de sa situation financière, laquelle n'apparaît pas favorable.
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'200 fr., sont mis à la charge du recourant.
4.
Le présent arrêt est communiqué aux parties et à la Cour d'appel pénale du Tribunal cantonal du canton de Vaud.
Lausanne, le 20 août 2019
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
Le Greffier : Graa