какова цель tslint no-var-keyword - запрещенное ключевое слово 'var'?

Какова цель tslint no-var-keyword («запрещенное ключевое слово 'var'»)? tslint, похоже, регистрирует ошибку при каждом появлении ключевого слова var в моем коде. Указывает ли tslint, что ключевое слово var должно быть безоговорочно исключено в ng2? Если да, то почему?


person user8570495    schedule 12.10.2017    source источник
comment
github.com/Microsoft/tslint-microsoft-contrib/issues/78   -  person CBroe    schedule 12.10.2017
comment
Возможный дубликат TSLint: неиспользуемое ключевое слово var   -  person Claies    schedule 12.10.2017
comment
Вы можете стать жертвой появления ошибок с var, если не знаете, что делаете :-)   -  person eko    schedule 12.10.2017


Ответы (2)


Правило и его обоснование описаны здесь https://palantir.github.io/tslint/rules/no-var-keyword/

Объявление переменных с использованием var имеет несколько вариантов поведения крайнего случая, которые делают var непригодным для современного кода. Переменные, объявленные var, имеют родительский функциональный блок в качестве области видимости, игнорируя другие операторы потока управления. vars имеют объявление «подъем» (аналогично функциям) и могут использоваться до объявления.

Переменные, объявленные с помощью const и let, вместо этого имеют в качестве своей области действия блок, в котором они определены, и не могут использоваться до объявления или повторно объявляться с другим const или let.

Отвечая на ваш второй вопрос, это не имеет ничего общего с Angular, ng2 или любой другой версией. Это проблема с Typescript. И да, они пытаются заставить вас полностью отказаться от var в пользу let и const.

Разница между let и var заключается в области видимости. Вы должны поместить объявления перед использованием, и вы можете повторно объявить их во вложенной области видимости. В TS вы также можете воспользоваться возможностью объявить другой тип, хотя я бы не одобрял это как стиль программирования.

person Peter Wone    schedule 14.05.2019

'var' устарел в пользу 'let'.

Первый создает глобальную переменную, что обычно считается плохой практикой, а второй создает переменную с ограниченной областью видимости.

Итак, lint по умолчанию принудительно использует переменные с заданной областью видимости.

person GreyBeardedGeek    schedule 12.10.2017
comment
Не совсем так, var создает переменную с областью видимости function (что необычно по сравнению со многими другими языками программирования с переменными с блочной областью видимости, отсюда и введение let с возможно более знакомой видимостью). - person John Weisz; 12.10.2017
comment
Да, вы правы - var не является глобальным, а имеет область видимости функции. См. Также подъем переменных - person GreyBeardedGeek; 12.10.2017