Эффективный TypeScript: 62 способа улучшить код
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабынан сөз тіркестері  Эффективный TypeScript: 62 способа улучшить код

Егор Маричев
Егор Маричевдәйексөз келтірді8 ай бұрын
Избегайте аннотирования типов, когда TypeScript может сделать их вывод. • Код должен содержать аннотации типов для сигнатур функций и методов, но не для местных переменных в их телах. • Чтобы предотвратить ошибки реализации в коде пользователя, попробуйте применить явные аннотации для объектных литералов и возвращаемых типов функций, даже если они могут быть выведены.
1 Ұнайды
Комментарий жазу
Никита З.
Никита З.дәйексөз келтірді2 апта бұрын
(Безопасна ли такая реализация? В ней есть проблемы. Во-первых, она не проверяет, совпадают ли значения this в «успешных» вызовах. Во-вторых, свойства в оригинальной функции были определены, а в оберточной — нет, и их типы могут не совпадать. Но если вы уверены в их совпадении, то реализация в порядке. Написать функцию в типобезопасном варианте гораздо сложнее.)
Комментарий жазу
Никита З.
Никита З.дәйексөз келтірді2 апта бұрын
Правило 37. Рассмотрите использование маркировок для номинального типизирования
Комментарий жазу
Мила
Миладәйексөз келтірді2 ай бұрын
el is HTMLInputElement, будучи возвращаемым типом, сообщает модулю проверки, что он может сузить тип параметра, если функция вернет true.
Комментарий жазу
Мила
Миладәйексөз келтірді2 ай бұрын
объект String может быть всегда равен только себе: > "hello" === new String("hello") false > new String("hello") === new String("hello") false
Комментарий жазу
Мила
Миладәйексөз келтірді2 ай бұрын
Вы можете встретить такой вид кода: const bob = {}. Это оригинальный вариант синтаксиса, соответствующий утверждению, и он является эквивалентом {} as Person.
Комментарий жазу
Мила
Миладәйексөз келтірді2 ай бұрын
Может ли тройка быть назначена для пары? Думая в категориях структурной типизации, вы можете ожидать, что это возможно. В паре есть ключи 0 и 1, так не может ли она иметь и другие тоже? Например, 2? const triple: [number, number, number] = [1, 2, 3]; const double: [number, number] = triple; // ~~~~~~ '[number, number, number]' не может быть назначен // для '[number, number]'. // Типы свойства 'length' являются несовместимыми. // Тип '3' не может быть назначен для типа '2'. Нет, и по весьма интересной причине. Вместо того чтобы моделировать пару чисел как {0: number, 1: number}, TypeScript моделирует ее как {0: number, 1: number, length: 2}.
Комментарий жазу
Мила
Миладәйексөз келтірді2 ай бұрын
extends также может оказаться ограничителем в обобщенных типах, сохраняя при этом значение подмножества (правило 14): function getKey(val: any, key: K) { // ... } Что значит расширить string? Будет сложно представить это в рамках наследования объекта или пытаться определить подкласс оберточного объекта типа String (правило 10). В контексте наборов значений все просто: расширением станет любой тип, чья область является подмножеством string: и литеральные типы, и объединения строковых литеральных типов, и сами string: getKey({}, 'x'); // ok, 'x' расширяет string
Комментарий жазу
Роман
Романдәйексөз келтірді3 ай бұрын
На рис. 8.3 приведен пример, составленный с помощью инструмента madge, изображающий JavaScript-проект среднего размера.
Комментарий жазу
JavaScript применяет утиную типизацию, а TypeScript ее моделирует при помощи структурной типизации.
Комментарий жазу