Editar: Esta resposta está incorreta. Não havia orientação oficial sobre o tópico quando eu o publiquei, mas, como explicado na resposta de @ Yaroslov (excelente e correta), esse não é mais o caso: o Codelizer agora alerta e a compilação do AoT falhará nas referências a variáveis privadas nos modelos de componentes . Dito isto, em um nível conceitual, tudo aqui permanece válido, então deixarei esta resposta como parece ter sido útil.
Sim, isso é esperado.
Lembre-se de que private
e outros modificadores de acesso são construções Typescript, enquanto Component / controller / template são construções angulares que a Typescript não conhece. Modificadores de acesso controlam a visibilidade entre classes: criar um campo private
impede que outras classes tenham acesso a ele, mas modelos e controladores são coisas que existem dentro das classes.
Isso não é tecnicamente verdade, mas (em vez de entender como as classes se relacionam com os decoradores e seus metadados), pode ser útil pensar dessa maneira, porque o importante (IMHO) é deixar de pensar no modelo e no controlador como separados entidades pensem nelas como partes unificadas do construto Component - este é um dos principais aspectos do modelo mental ng2.
Pensando dessa maneira, obviamente esperamos que private
variáveis em uma classe de componente sejam visíveis em seu modelo, pelo mesmo motivo que esperamos que sejam visíveis nos private
métodos dessa classe.