Edycja: ta odpowiedź jest teraz nieprawidłowa. Nie było oficjalnych wskazówek na ten temat, kiedy to opublikowałem, ale jak wyjaśniono w odpowiedzi @ Yaroslova (doskonała i poprawna), to już nie ma miejsca: Codelizer ostrzega teraz i kompilacja AoT nie powiedzie się w przypadku odwołań do zmiennych prywatnych w szablonach komponentów . To powiedziawszy, na poziomie koncepcyjnym wszystko tutaj pozostaje aktualne, więc zostawię tę odpowiedź, ponieważ wydaje się być pomocna.
Tak, jest to oczekiwane.
Należy pamiętać, że privatei inne modyfikatory dostępu są konstrukcjami Typescript, podczas gdy komponent / kontroler / szablon to konstrukcje kątowe, o których Typescript nic nie wie. Modyfikatory dostępu kontrolują widoczność między klasami: utworzenie pola privateuniemożliwia innym klasom dostęp do niego, ale szablony i kontrolery to elementy, które istnieją w klasach.
To nie jest technicznie prawda, ale (zamiast rozumieć, w jaki sposób klasy odnoszą się do dekoratorów i ich metadanych), warto pomyśleć o tym w ten sposób, ponieważ ważne jest (IMHO) odejście od myślenia o szablonie i kontrolerze jako osobnych by traktować je jako zjednoczone części konstrukcji komponentu - jest to jeden z głównych aspektów modelu mentalnego ng2.
Myśląc o tym w ten sposób, oczywiście oczekujemy, że privatezmienne w klasie komponentów będą widoczne w jej szablonie, z tego samego powodu, dla którego oczekujemy, że będą widoczne w privatemetodach tej klasy.