W TypeScript tego const
słowa kluczowego nie można użyć do zadeklarowania właściwości klasy. Powoduje to błąd kompilatora: „Członek klasy nie może mieć słowa kluczowego„ const ”.
Czuję potrzebę wyraźnego wskazania w kodzie, że właściwość nie powinna być zmieniana. Chcę, aby IDE lub kompilator popełnił błąd, jeśli spróbuję przypisać nową wartość do właściwości po jej zadeklarowaniu. Jak to osiągacie?
Obecnie używam właściwości tylko do odczytu, ale jestem nowy w maszynopisie (i JavaScript) i zastanawiam się, czy istnieje lepszy sposób:
get MY_CONSTANT():number {return 10};
Używam maszynopisu 1.8. Propozycje?
PS: Teraz używam maszynopisu 2.0.3, więc zaakceptowałem odpowiedź Davida
źródło
export
słowo kluczowe zarówno przed,class
jak ipublic static
przedreadonly
słowem kluczowym. Zobacz tutaj: stackoverflow.com/a/22993349export
(moduły zewnętrzne) orazpublic
słowa kluczowe są związane z tym pytanie / odpowiedź, ale na temat jednoznaczność, ja osobiście uważam, że bardzo łatwo powiedzieć, że członek jest publiczny, gdy słowo kluczowe nie istnieje. Z tego powodu nie zawracam sobie tym głowy, ponieważ powoduje to większy hałas i nie wymaga pisania. To także odróżnia członków publicznych od tych oznaczonych jakoprivate
lubprotected
. W każdym razie, tylko moja opinia :)static readonly myReadOnlyProperty
gdy deklarowana jest klasaexport default class { ... }
? Próbowałem this.myVar, self.myVar, statyczny, domyślny ... nie działa ... (EDYCJA: default.myVar wydaje się być rozwiązaniem, ale dostaję błąd typu)Stałe mogą być deklarowane poza klasami i używane w twojej klasie. W przeciwnym razie
get
właściwość jest dobrym obejściemźródło
get
nieruchomości jest bardzo odpowiednie w twoim przypadkuexport const
a następnie zaimportować z innego pliku. Byłoby to jednak dość łatwe do przetestowania. Po prostu zadeklaruj plikconst
w jednym pliku i spróbuj użyć go w innym pliku bez eksportu / importu lub użyj go z konsoli przeglądarki.W
readonly
swojej deklaracji możesz oznaczyć właściwości modyfikatorem:@ Zobacz książkę Deep Dive TypeScript - tylko do odczytu
źródło
Angular 2 Zapewnia bardzo miłą funkcję o nazwie Stałe nieprzezroczyste. Utwórz klasę i Zdefiniuj wszystkie stałe za pomocą nieprzezroczystych stałych.
Wstrzyknij go dostawcom w app.module.ts
Będziesz mógł używać go we wszystkich komponentach.
EDYCJA dla Angular 4:
W przypadku Angulara 4 nowa koncepcja to Injection Token, a nieprzezroczysty token jest przestarzały w Angular 4.
Token wtrysku Dodaje funkcje na nieprzezroczyste tokeny, pozwala dołączyć informacje o typie do tokena za pomocą ogólnych znaków TypeScript oraz tokenów wtrysku, eliminuje potrzebę dodawania @Inject
Przykładowy kod
Angular 2 Korzystanie z nieprzezroczystych tokenów
Angular 4 Korzystanie z żetonów wtryskowych
Żetony wtrysku są logicznie zaprojektowane na żetonach nieprzezroczystych, a żetony nieprzezroczyste są nieaktualne w Angular 4.
źródło
Albo użyj modyfikatora readOnly ze stałą, którą należy zadeklarować, albo można zadeklarować stałą poza klasą i używać jej konkretnie tylko w wymaganej klasie za pomocą operatora get.
źródło
W tym celu możesz użyć
readonly
modyfikatora. Właściwości obiektu, którereadonly
można przypisać tylko podczas inicjalizacji obiektu.Przykład w klasach:
Przykład w literałach obiektowych:
Warto również wiedzieć, że
readonly
modyfikator jest wyłącznie konstrukcją maszynopisu, a gdy TS jest kompilowany do JS, konstrukcja nie będzie obecna w skompilowanym JS. Gdy modyfikujemy właściwości, które są tylko do odczytu, kompilator TS ostrzeże nas o tym (jest to poprawny JS).źródło
Dla mnie żadna z wcześniejszych odpowiedzi nie działa. Musiałem przekonwertować klasę statyczną na wyliczanie. Lubię to:
Następnie w moim komponencie dodaję nową właściwość, jak sugerowano w innych odpowiedziach
Następnie w szablonie mojego komponentu używam go w ten sposób
EDYCJA: Przepraszam. Mój problem był inny niż OP. Nadal zostawiam to tutaj, jeśli niektóre osoby mają ten sam problem niż ja.
źródło