10 Функций JavaScript и TypeScript, которых я избегаю
?^.
Это называется необязательной цепочкой.
Пример:
user?:.id
Зачем этого избегать? Потому что он говорит Я не уверен, существует ли это свойство
Решение: Убедитесь, что оно существует. Проверяйте данные и используйте специальные типы для различных подстановок данных.
?:
Это объявление необязательного поля в TypeScript.
Пример:
user?:string
Зачем это избегать? Потому что оно не указывает, когда поле должно или не должно существовать. Это снижает безопасность типов.
Решение: Объявите отдельные типы с правильными именами для случаев, когда поле должно и не должно существовать.
as
Ключевое слово as
является утверждением типа.
Зачем его избегать? Потому что оно говорит: Поверь мне, TypeScript, на самом деле это такой тип, так что не утруждай себя проверкой.
Решение: Используйте сужение типа.
var
и let
Это низшие подходы к объявлению типа.
Зачем их избегать? Потому что они предоставляют читателю меньше информации и поощряют написание мутативного кода.
Решение: Используйте const
константу. Она сообщает читателю: Значение этой переменной может измениться, но оно не будет переназначено.
any
Ключевое слово any
отключает проверку типов TypeScript.
Зачем этого избегать? Потому что это делает TypeScript бесполезным.
Решение: Объявить тип.
else
Ключевое слово else
сочетается с оператором if
.
Зачем его избегать? Потому что это признак мутативного кода. Предпочитайте неизменяемые шаблоны.
Решение: Сделайте присваивание с помощью одного выражения, возможно с помощью тернарного.
class
Ключевое слово class
объявляет JavaScript класс.
Зачем его избегать? Потому что функции, как правило, предпочтительнее, менее запутаны и менее подвержены ошибкам.
Решение: Пишите в основном чистые функции. Они более компонуемые и их легче тестировать.
enum
Объявляет перечисление TypeScript
Зачем его избегать? Потому что обычно есть лучшие альтернативы.
Решение: Используйте простой объект или объединение строк, полученное из массива, помеченного как константа.
switch
Создаёт условную логику.
Зачем его избегать? Потому что это часто не нужно и снижает безопасность типов, если не исчерпывает.
Решение: Комбинируйте TypeScript Record
с объединением типов, чтобы применить исчерпывающие проверки. Или вообще исключите switch
, если это возможно, инвертируя управление.
Многие люди ответили примерами, где эти функции полезны и даже необходимы. Я согласен. Вот почему я сказал Я избегаю их
. Есть веские причины, по которым эти функции существуют. Я просто хочу сказать, что ими злоупотребляют и часто они не нужны, поэтому избегаю их, когда могу.