В TypeScript const
ключевое слово нельзя использовать для объявления свойств класса. Это приводит к ошибке компилятора: «Член класса не может иметь ключевое слово« const ».»
Мне нужно четко указать в коде, что свойство не должно быть изменено. Я хочу, чтобы среда IDE или компилятор выдавали ошибку, если я пытаюсь присвоить новое значение свойству после его объявления. Как вы, ребята, добились этого?
В настоящее время я использую свойство только для чтения, но я новичок в Typescript (и JavaScript) и задаюсь вопросом, есть ли лучший способ:
get MY_CONSTANT():number {return 10};
Я использую машинопись 1.8. Предложения?
PS: сейчас я использую машинопись 2.0.3, поэтому я принял ответ Дэвида
источник
export
ключевое словоclass
как до, так иpublic static
передreadonly
ключевым словом. Смотрите здесь: stackoverflow.com/a/22993349export
(внешние модули) иpublic
ключевое слово не имеют никакого отношения к этому вопрос / ответ, но на тему эксплицитности, я лично считаю , это очень легко сказать , что член является публичным , когда ключевое слово не существует. Я не беспокоюсь об этом по этой причине и потому, что это добавляет больше шума и бесполезно печатать. Это также делает общественных участников более отличными от тех, которые отмечены какprivate
илиprotected
. Во всяком случае, только мое мнение :)static readonly myReadOnlyProperty
когда класс объявлен сexport default class { ... }
? Пробовал this.myVar, self.myVar, static, default ... не работает ... (EDIT: default.myVar, кажется, решение, но я получаю ошибку типа)Константы могут быть объявлены вне классов и использоваться внутри вашего класса. В противном случае
get
это хороший обходной путьисточник
get
собственности очень уместным в вашем случаеexport const
и затем импортировать его из другого файла. Было бы довольно легко проверить, хотя. Просто объявитеconst
в одном файле и попробуйте использовать его в другом без экспорта / импорта или использовать его из консоли браузера.Вы можете пометить свойства с помощью
readonly
модификатора в вашем объявлении:@see машинопись Deep Dive книга - ReadOnly
источник
Angular 2 Обеспечивает очень хорошую функцию, называемую непрозрачными константами. Создайте класс и определите все константы там, используя непрозрачные константы.
Внедрить его в провайдеров в app.module.ts
Вы сможете использовать его для всех компонентов.
РЕДАКТИРОВАТЬ для Angular 4:
Для Angular 4 новой концепцией является Injection Token, а Opaque token устарела в Angular 4.
Injection Token Добавляет функциональные возможности поверх непрозрачных токенов, позволяет прикреплять информацию о типе к токену с помощью обобщений TypeScript, а также токенов Injection, устраняет необходимость добавления @Inject
Пример кода
Angular 2 с использованием непрозрачных токенов
Angular 4 Использование токенов
Токены инъекции логически разработаны поверх жетонов Opaque, а жетоны Opaque устарели в Angular 4.
источник
Либо используйте модификатор readOnly с константой, которую необходимо объявить, либо можно объявить константу вне класса и использовать ее специально только в требуемом классе, используя оператор get.
источник
Для этого вы можете использовать
readonly
модификатор. Свойства объекта, которыеreadonly
могут быть назначены только во время инициализации объекта.Пример в классах:
Пример в литералах объекта:
Также стоит знать, что
readonly
модификатор является чисто структурой машинописного текста, и когда TS скомпилирован в JS, эта конструкция не будет присутствовать в скомпилированном JS. Когда мы изменяем свойства, которые доступны только для чтения, компилятор TS предупредит нас об этом (это действительно JS).источник
Для меня ни один из более ранних ответов не работает. Мне нужно было преобразовать мой статический класс в enum. Нравится:
Затем в моем компоненте я добавляю новое свойство, как предлагается в других ответах
Затем в шаблоне моего компонента я использую его таким образом
РЕДАКТИРОВАТЬ: Извините. Моя проблема отличалась от ОП. Я все еще оставляю это здесь, если у кого-то есть та же проблема, что и у меня.
источник