Чем js отличается от typescript
TypeScript — язык программирования, представленный Microsoft в 2012 году и позиционируемый как средство разработки веб-приложений, расширяющее возможности JavaScript
TypeScript является обратно совместимым с JavaScript и компилируется в последний. Фактически, после компиляции программу на TypeScript можно выполнять в любом современном браузере или использовать совместно с серверной платформой Node.js. Код экспериментального компилятора, транслирующего TypeScript в JavaScript, распространяется под лицензией Apache. Его разработка ведётся в публичном репозитории через сервис GitHub.
TypeScript отличается от JavaScript возможностью явного статического назначения типов, поддержкой использования полноценных классов (как в традиционных объектно-ориентированных языках), а также поддержкой подключения модулей, что призвано повысить скорость разработки, облегчить читаемость, рефакторинг и повторное использование кода, помочь осуществлять поиск ошибок на этапе разработки и компиляции, и, возможно, ускорить выполнение программ.
Особенности языка
TypeScript это расширение языка ECMAScript 5. Добавлены следующие опции:
- Аннотации типови проверка их согласования на этапе компиляции
- Вывод типов
- Классы
- Интерфейсы
- Перечисляемые типы
- Примесь
- обобщённое программирование
- Модули
- Сокращенный синтаксис «стрелок» для анонимных функций
- Дополнительные параметры и параметры по умолчанию
- Кортежи
Синтаксически, TypeScript очень похож на JScript .NET, очередную реализацию Microsoft языкового стандарта ECMA-262, обеспечивающего поддержку статической типизации и классических объектно-ориентированных возможностей языка, таких как классы, наследование, интерфейсы и пространства имен.
Совместимость с JavaScript
TypeScript является надстройкой над JavaScript. Таким образом, программа JavaScript также является правильной программой TypeScript, и программы TypeScript могут легко включать JavaScript. TypeScript компилирует ES3-совместимый JavaScript. По умолчанию компилируется ECMAScript 3, как преобладающей стандарт; также есть возможность создавать конструкции, используемые в ECMAScript 5.
С TypeScript можно использовать существующий JavaScript-код, включать популярные библиотеки JavaScript, и вызывать TypeScript-код, сгенерированный из других JavaScript. Объявление типов для этих библиотек поставляются вместе с исходным кодом.
JavaScript и TypeScript: В чём разница?
JavaScript — это язык сценариев, который помогает создавать интерактивные веб-страницы. Он следует правилам программирования на стороне клиента, поэтому он запускается в веб-браузере пользователя без необходимости использования каких-либо ресурсов веб-сервера. Так же вы можете использовать JavaScript с другими технологиями, такими как REST API, XML и прочие.
Идея разработки этого сценария состоит в том, что бы сделать его дополнительным языком сценариев, таким как Visual Basic был для C++ в семействе языков Майкрософт. Однако JavaScript не предназначен для больших и сложных приложений. Он был разработан для приложений с несколькими сотнями строк кода!
Что такое TypeScript?
TypeScript — это современный язык разработки JavaScript. Это статически компилируемый язык для написания чистого и понятного JavaScript кода. Он может быть запущен на Node.js или в любом браузере, поддерживающим ECMASCript 3 или новее.
TypeScript предоставляет необязательную статическую типизацию, классы и интерфейс. Для большого JavaScript проекта внедрение TypeScript может дать более стабильное и легко устанавливаемое программное обеспечение, как обычное JavaScript приложение.
Далее мы рассмотрим ключевые различия между TypeScript и JavaScript.
Ключевые различия
- JavaScript — это язык сценариев, который помогает создавать интерактивные веб-страницы, в то время как TypeScript — это надстройка JavaScript.
- TypeScript код должен быть скомпилирован, в то время когда JavaScript не нуждается в компиляции.
- TypeScript поддерживает функцию прототипирования, в отличие от JavaScript.
- TypeScript использует такие концепции, как типы и интерфейсы для описания используемых данных, в то время как в JavaScript таких концепций нет.
- TypeScript — это мощная система типов включающая дженерики и возможности JavaScript для больших проектов, в то время как JavaScript идеален для небольших проектов.
Почему JavaScript?
- Проект с открытым исходным кодом под патронажем Майкрософт
- Специально разработанный инструмент для небольших сценариев
- Поддерживает классы, интерфейсы и модули
- Скомпилированный JavaScript запускается в любом браузере
- Разрешает кросс-компиляцию
- Вы можете расширить JavaScript для написания больших приложений
- Добавляет поддержку классов, интерфейсов и модулей.
Почему TypeScript?
- TypeScript поддерживает JavaScript-библиотеки и API-документацию
- Это надмножество JavaScript
- Это опционально типизированный язык сценариев
- TypeScript можно конвертировать в простой JavaScript код
- Улучшенная структура кода и техники объектно-ориентированного программирования
- Обеспечивает лучшую поддержку инструмента времени разработки
- Он может расширить язык за пределы стандартных декораторов async/await
Разница между JavaScript и TypeScript
Ниже приведены основные различия TypeScript и javaScript
Параметр | TypeScript | JavaScript |
---|---|---|
Что это | Мощная система типов, включающая дженерики и возможности JS | Лёгкий, интерпретируемый, объектно-ориентированный язык с первоклассными функциями |
Присвоение данных | TypeScript использует такие концепции, как типы и интерфейсы для описания используемых данных | В JavaScript нет такой концепции |
Экосистема | Мощная и интуитивно понятная экосистема. Таким образом он позволяет вам статически типизировать различные типы идиоматических возможностей JS, таких, как объединение, пересечения, различаемое объединение. | JavaScript даёт возможность исследовать и создавать код без этапа сборки. |
NPM пакеты | С TypeScript, многие npm пакеты либо поставляются со статически определёнными типами, либо имеют дополнение которое легко установить. | JavaScript даёт возможность исследовать и создавать код без этапа сборки. |
Кривая обучения | Жёсткая кривая обучения. Требует первоначального знания сценариев. | Гибкий и простой в освоение язык сценариев |
Прототипирование | В TypeScript есть возможность прототипирования | У JavaScript нет такой возможности |
Сообщество | У TypeScript нет большого сообщества разработчиков | У JavaScript огромное сообщество разработчиков |
Компиляция | TypeScript код необходимо компилировать | JavaScript не требуется компиляция |
Аннотация | Что бы получить максимальную отдачу от TypeScript разработчик должен постоянно указывать тип переменных | В JavaScript не требуется аннотация |
Известные компании использующие технологию | Asana, Clever, Screen award | Airbnb, Codecademy, Instagram |
Зарплаты (в США) | Средняя зарплата TypeScript-разработчика в год 148027$ | Средняя зарплата JavaScript-разработчика в год 110777$ |
История JavaScript
Программист корпорации Netscape Communication Брендан Эйх (или Айк) (Brendan Eich /ˈaɪk/) создал язык для изначально называвшийся Mocha он предназначался для работы Netscape navigator. Однако став популярным инструментом для создания скриптов был переименован в LiveScript. Позже он был переименован в JavaScript, что бы отобразить поддержку Java в браузере Netscape.
Давайте посмотрим на важные вехи в истории javaScript:
- Он был запущен в сентябре 1995 и понадобилось всего десять дней для разработки языка сценариев, который первоначально назывался Mocha
- В ноябре 1996 года Netscape представила JavaScript в ECMA (European Computer Manufacturers Association — Европейская Ассоциация Производителей Компьютеров) International
- ECMAScript 2 был выпущен в 1998 году
- ECMAScript 3 был выпущен в 1999 году
- В 2005 году Эйх (Айк) и Mozilla присоединились к ECMA для разработки E4X JavaScript
- В январе 2009 был запущен проект CommonJS с целью определения общей стандартной библиотеки
- В июне 2011 года был выпущен ECMAScript 5.1
- В июне 2015 года был выпущен ECMAScript 2016
- Текущая версия ECMAScript 2017, была выпущена в июне 2017 года
История TypeScript
Давайте рассмотрим важные вехи в истории TypeScript:
- Впервые TypeScript был представлен публике в 2012 году
- После двух лет внутренней разработки в Майкрософт, в 2013 году был выпущен TypeScript 0.9
- Дополнительная поддержка дженериков появилась в TypeScript 1.0, выпущенном в 2014 году
- В Июле 2014 года, новый компилятор TypeScript стал работать в пять раз быстрее предыдущих версий
- В Июле 2015 года появилась поддержка модулей ES6, пространства имён, ключевое слово for . of support , декораторы
- В ноябре 2016 были добавлены keyof и типы поиска, сопоставленные типы и остальное
- 27 марта 2018 года, добавлены условные типы, улучшены поддержка keyof с типами пересечения Typescript
Возможности JavaScript
- Это кросс-платформенный язык
- Используется для программирования как на стороне клиента, так и на стороне сервера
- Лёгок для изучения и старта
- Динамический язык: гибки и мощный
- Большая свобода выбора делать всё, что вы хотите с любым объектом
- Надёжный процесс тестирования
- Добавлены зависимости
- Нет поддержки фреймворков
Возможности TypeScript
- Обслуживаемость
- Предлагает отличную производительность для разработчиков
- Навигация по коду и предотвращение ошибок
- Обнаруживаемость и рефакторинг
- Опциональная аннотация статических типов / статическая типизация
- Дополнительные возможности функций
- Поддерживает ES6
- Поддерживает интерфейсы, под-интерфейсы, классы и под-классы
- Масштабируемая html5 разработка на стороне клиента
- IDE с богатым функционалом, возможностями автодополнения и навигации по коду
- Основанный на классах объектно-ориентированный с наследованием приватных свойств и интерфейсов
JavaScript vs. TypeScript: Что лучше?
Подводя итоги сравнения JavaScript и TypeScript можно сказать, что если опытный разработчик работает над небольшим проектом, то идеальным вариантом будет — JavaScript. Однако если у вас команда опытных разработчиков, предпочтительным вариантом будет TypeScript.
TypeScript и JavaScript: что использовать и почему
TypeScript — open-source язык программирования, созданный и поддерживаемый Microsoft. Это надмножество JavaScript: любой JS код запускается в окружении TypeScript.
TypeScript придумали, чтобы решить проблемы, возникающие во время разработки крупных JS приложений. Такие приложения состоят из сотен различных файлов. Изменение в одном файле может затронуть множество других. JS не умеет проверять связи между файлами, поэтому разработчики допускали много ошибок, что приводило к багам на проде. Поэтому был нужен фронтенд язык типа TypeScript со статической типизацией.
В отличие от JS, TypeScript компилируемый язык, как C# или Java. Среди фич TypeScript можно встретить множество знакомых вещей. Мои любимые – enum, интерфейсы, модификаторы доступа, неймспейсы, дженерики и т.д.
Множество npm библиотек написано на чистом JS, поэтому TypeScript’у нужен был способ типизировать их. Так появились файлы объявления типов (.d.ts). Такие файлы определяют типы с информацией о коде. Компилятор с их помощью сверяет типы в TypeScript коде. Сейчас большинство JS библиотек имеют TypeScript версии. Даже если в библиотеке нет объявленных типов, TypeScript может вывести их. В остальных случаях вы можете сами объявить типы.
TypeScript отлично подходит для больших веб-приложений, так как позволяет писать как фронтенд так и бэкенд код. Для бэкенда нужно установить библиотеку ts-node для исполнения TypeScript кода на Node.js окружении.
Какие преимущества у TypeScript перед JavaScript?
В 2022 году TypeScript вошел в топ-5 используемых языков во всем мире. Неудивительно, ведь TS постоянно развивается, добавляются новые фичи, а команды TS прислушиваются к сообществу разработчиков.
Основное преимущество TS перед обычным JS в компиляторе, который проверяет типы и ошибки. Он проверяет типы и показывает ошибку в реальном времени. Это удобно при рефакторинге кода, компилятор подсвечивает вещи, которые вы могли упустить.
В паре с новейшей IDE типа Visual Studio Code TS может похвастаться функцией Intellisense – подсказки по коду и автокомплитер кода. Эта фича ускоряет разработку.
Разработчики могут настроить поведение TS через файл tscobnfig. Например, в TS есть опция транспиляции кода, которая адаптирует код под предыдущие версии JS, чтобы приложение запускалось во всех браузерах. Также можно выделить опцию strict mode – более строгая проверка кода.
Еще одна крутая фича TS – возможность запускаться параллельно с JS кодом, что упрощает интеграцию в старых проектах с множеством JS файлов.
Также TS позволяет использовать ES6 и ES7 фичи, которые еще не поддерживаются основными браузерами. Например, чейнинг оператор и константы в классах поддерживались в TS задолго до официальной поддержки ECMAScript.
И наконец, в TS много фич, которых нет в JS, что делает кодинг веселее. Интерфейсы, enum и дженерики сильно повысят читаемость вашего кода.
Какие недостатки у TypeScript перед JavaScript?
TS дает множество преимуществ, но он также привносит и недостатки. Среди них нет критичных, однако новичкам стоит о них знать.
Существенный минус TS заключается в ложном ощущении защищенности у его пользователей. Очень часто разработчики, переходя на TS, слишком сильно полагаются на компилятор в надежде, что он подсветит все ошибки с типами. Не думайте, что ваш TS код идеален. Разработчики TS соблюли тонкую грань между гибкостью и правильностью. Но хоть TS и не совершенен, он все же лучше обычного JS, на мой взгляд. Ведь компилятор отлавливает баги, которые вы могли бы не увидеть. Доказано, что TS помогает находить на 15% больше багов чем JS.
Дополнительный шаг с компиляцией также можно отнести к недостаткам TS. Этот шаг увеличивает время билда, а также усложняет сборку.
TS привносит много новых фич, которые могут быть не знакомы фронтенд разработчикам. Из-за этого изучать этот язык сложнее. Если использовать весь потенциал языка, TS может быть сложновато понять неподготовленному разработчику. Ему потребуется часто гуглить или спрашивать наставника.
И наконец, некоторые разработчики жалуются, что TS заставляет писать слишком много кода по объявлению типов. Хоть это и так, но в долгосрочной перспективе такой подход позволяет сэкономить время. С TS проще проводить онбординг новых членов команды, а также легче рефакторить код.
Когда стоит использовать TypeScript в новых проектах?
Вас может пугать внедрение новой технологии, с которой у вас совсем нет опыта. Однако с TS оно того стоит, ведь плюсы перевешивают минусы.
Если вы работаете один и не планируете привлекать людей для разработки, я рекомендую использовать TS для следующего проекта. Первые часы настройки будет сложновато, но вы быстро полюбите TS и больше не захотите возвращаться к обычному JS. Сначала вы будете писать код медленнее, но так вы сэкономите на дебаге и рефакторинге в долгосрочной перспективе.
Если же вы работаете в команде, тут будет сложнее. Нужно найти согласие в команде и с менеджментом. Хоть TS и поможет вашей команде в конечном итоге, но в краткосрочной перспективе он замедлит вашу команду. Команде нужно быть готовой к тому, что придется часть времени тратить на изучение TS, его фич и лучших практик. Помочь команде совершить плавный переход может сотрудник с глубоким знанием TS или любого другого ООП языка (например, C#).
Если команда готова пожертвовать краткосрочным снижением производительности для изучения TS, я рекомендую этот язык. Вы точно не пожалеете.
Когда не стоит использовать TypeScript в новом проекте?
Есть причины, по которым я бы не рекомендовал использовать TS, несмотря на всю привлекательность TS.
Самая главная причина не использовать TS – строгий дедлайн. Дедлайны достаточно стрессовая вещь, и внедрение новой незнакомой технологии в таком случае не рекомендуется. К сожалению, на изучение TypeScript нужно время. А это время можно потратить на проекты, где есть дедлайны.
У новичков могут возникнуть сложности с настройкой TS. Возможно, потребуется множество npm библиотек, работа с бандлерами (например, webpack). Если у вас нет времени все это изучать, не используйте TS.
Очередной аргумент – повышенная точка входа для разработчиков. Если проект open-source, разработчикам может быть сложнее вносить доработки.
Для менеджеров и HR использование TS в проекте значит, что при найме разработчиков нужно смотреть на опыт с TS или другим ООП языком. TS повышает минимальные требования для найма сотрудников в проект, а также может увеличить бюджет, ведь нужно нанимать более опытных разработчиков.
TypeScript и JavaScript в старых проектах
Миграция старых проектов с JS в TS вносит множество преимуществ в цикл разработки. TS позволяет отловить баги, которые раньше не замечали. Также упрощается поддержка проекта.
В маленьких проектах миграция с JS на TS может потребовать установку парочки библиотек и простой смены расширений файлов с .js на .ts с последующим фиксом ошибок TS компилятора.
В проектах с сотнями JS файлов все сложнее. Внедрять TS можно постепенно. Можно приоритизировать миграцию файлов в TS и их параллельную работу со старым JS кодом.
Второй вариант – сохранить старый код, а уже новые фичи писать на TS. Когда фича задевает старый код, вы можете мигрировать его прямо пока пишите код для этой фичи.
TypeScript или JavaScript: вердикт
В нашем сравнении TypeScript и JavaScript вы увидели, что TS это отличный ООП язык, с помощью которого можно более эффективно писать большие приложения.
Несмотря на более сложный код и дополнительное время на компиляцию, в долгосрочной перспективе вы сэкономите время. Если вы работаете один, я настоятельно рекомендую использовать TS в вашем следующем проекте.
Если же вы работаете в команде, внедрение TS потребует убеждения людей. Рекомендую начать новый TS проект в свободное время. Потом вы можете просто показать этот проект членам команды и объяснить все преимущества TS.
Автор: Tim Mouskhelichvili
Редакция: Команда webformyself.
JavaScript vs TypeScript. Почему Вы должны изучить TypeScript?
JavaScript один из самый популярных языков программирования. Одна из причин этого, что он является динамически типизированным. Другим словами, JavaScript – это более свободный язык, но, если вы встретите много кода в вашем проекте, то эта свобода может перерасти в панику.
Давайте взглянем на данный код.
const pikachu = (a, b) =>
Можете ли вы угадать, что вернет этот код?
Я не могу, т.к. функция pikachu может принимать в себя значения любого типа, к примеру, строка, число и т.д.
// Передается число. const pikachu = (a, b) => < return a + b; >const result = pikachu(2021, 9); console.log(result); // 2030
// Передается строка. const pikachu = (a, b) => < return a + b; >const result = pikachu("2021", "9"); console.log(result); // 20219
JavaScript это язык с динамической типизацией. Это полезно тем, что позволяет писать код более легко. Но, разработчики должны уделять больше внимания типам аргументов, которые нужны в функции, а также какое значение должно возвращаться. Чем больше и больше вы читаете различный код, тем более это начинает раздражать.
С другой стороны, пожалуйста, посмотрите на данный код.
const pikachu = (a: number, b: number): number =>
Данный код на typescript. TypeScript – это язык с статической типизацией. Когда мы смотрим на это, мы сразу можем понять, что значение, которое возвращает функция pikachu будет числом.
Очень полезно быстро понимать код, потому что при работе вы будете встречаться с большим количеством кода.
Так что, мы должны использовать более легкие в чтении методы, чтобы в дальнейшем, быстрее читать и понимать код, который кто-либо написал в прошлом.
Основы TypeScript
TypeScript имеет несколько примитивный типов данных, таких как string, number, boolean, null, undefined.
Это код с простыми типами данных.
const caterpie01: number = 2021; // OK const caterpie02: number = false; // Не ок const Metapod01: string = "sleepy"; // OK const Metapod02: string = true; // Не ок const Wartortle01: boolean = true; // OK const Wartortle02: boolean = 1111; // Не ок
При запуске кода мы сразу встречаем несколько ошибок.
typescript.ts:10:7 - error TS2322: Type 'boolean' is not assignable to type 'number'. 10 const caterpie02: number = false; // Не ок ~~~~~~~~~~ typescript.ts:13:7 - error TS2322: Type 'boolean' is not assignable to type 'string'. 13 const Metapod02: string = true; // Не ок ~~~~~~~~~ typescript.ts:16:7 - error TS2322: Type 'number' is not assignable to type 'boolean'. 16 const Wartortle02: boolean = 1111; // Не ок ~~~~~~~~~~~
Дальше, давайте посмотрим на null и undefined.
const Butterfree: null = null; const ButterfreeNull: string = Butterfree; console.log(ButterfreeNull) // null const Kakuna: undefined = undefined; const KakunaNull: string = Kakuna; console.log(KakunaNull) //undefined
Этот код работает. Мы можем устанавливать значения null и undefined строкам. В данном случае, я не использовал strict mode. При использовании же, код работает примерно так.
typescript.ts:21:7 - error TS2322: Type 'null' is not assignable to type 'string'. 21 const ButterfreeNull: string = Butterfree; ~~~~~~~~~~~~~~ typescript.ts:25:7 - error TS2322: Type 'undefined' is not assignable to type 'string'. 25 const KakunaNull: string = Kakuna;
И это хорошо! Мы сразу можем отлавливать ошибки.
Вы можете установить strict mode в tsconfig.json или использовать аргумент командой строки tsc —strict. Если вы не уверен, в том, как настраивать typescript, вы модете посмотреть примеры на офф. сайте.
Что такое тип данных “any”?
В TypeScript можно использовать тип данных any. Это позволяет работать с любым типом данных без ошибок. Прямо как в обычном javascript.
Давайте взглянем на пример кода.
let pidgey: any = 1991; console.log(typeof pidgey) // number pidgey = "bird"; console.log(typeof pidgey) // string pidgey = false; console.log(typeof pidgey) // boolean pidgey = null; console.log(typeof pidgey) // object pidgey = undefined; console.log(typeof pidgey) // undefined
Переменной pidgey можно присвоить любой тип данных!
Это магический тип данных.
Если вы собираетесь использовать тип данных any, то TypeScript нам сразу становится не нужным. Просто пишите код на JavaScript.
TypeScript также может сам определять какой тип данных будет использоваться, если мы его не указываем.
Мы можем заменить код из первого примера на данный.
const caterpie01: number = 2021; // number const caterpie001 = 2021; // number - выбор typescript const Metapod01: string = "sleepy"; // string const Metapod001 = "sleepy"; // string - выбор typescript const Wartortle01: boolean = true; // boolean const Wartortle001 = true; // boolean - выбор typescript
Это более читаемый и короткий способ записи. И, конечно, мы не сможем присвоить любой другой тип данных в переменную.
let caterpie001 = 2021; // number caterpie001 = "text"; // type error
С другой стороны, если мы не укажем тип данных для аргументов функции, typescript выберет тип any. Посмотрим на код.
const pikachu = (a, b) => < return a + b; >pikachu(2021, 9);
Я получил вот такие ошибки. (В данный момент у меня включен strict mode. Если же его выключить, то код прекрасно отработает)
typescript.ts:57:18 - error TS7006: Parameter 'a' implicitly has an 'any' type. 57 const pikachu = (a, b): number => < ~ typescript.ts:57:21 - error TS7006: Parameter 'b' implicitly has an 'any' type. 57 const pikachu = (a, b): number =>
Всё из-за того, что typescript не может узнать какое значение будет получено.
Для этого тип данных any и был добавлен в typescript. Когда мы используем функции в typescript, мы должны указывать типы данных для аргументов, как на примере.
const pikachu = (a: number, b: number): number =>
// можно также не указывать какой тип данных будет возвращаться const pikachu = (a: number, b: number) =>
Если вы создаете функцию в typescript, вы обязаны указывать тип данных. Я также рекомендую не использовать тип данных any, за исключением специфичных ситуаций. Таких, как, к примеру, при миграции с JavaScript на TypeScript.
Тип данных для объектов
TypeScript позволяет указывать тип данных для объектов через interface.
Посмотрим на пример.
// Определяем типы данных для объекта interface PokemonObj < name: string, age: number, skill: string >// Назначаем типы const pokemon: PokemonObj =
Мы можем использовать interface для создания типа данных для объектов. А затем назначать interface в объекте.
Если мы изменим тип данных внутри объекта, то получим ошибку.
// Определяем типы данных для объекта interface PokemonObj < name: string, age: number, skill: string >// Назначаем типы const pokemon: PokemonObj = < name: "pikachu", age: "change age", // изменили skill: "Electric Shock!" >
Ниже текст ошибки.
typescript.ts:75:3 - error TS2322: Type 'string' is not assignable to type 'number'. 75 age: "change age", ~~~ typescript.ts:69:3 69 age: number, ~~~ The expected type comes from property 'age' which is declared here on type 'PokemonObj'
Мы получаем ошибку типов. Удобно использовать interface как тип данных у объектов. Но, конечно же, мы можем описывать тип данных объекта сразу в коде, прямо как на примере.
const pokemon: =
Тип данных для массивов
Массив с типами данных выглядит вот так.
const pokemon: string[] = ["pikachu", "Raichu", "Charizard"];
Если мы изменим тип данных, то получим ошибку.
const pokemon: string[] = ["pikachu", "Raichu", false];
typescript.ts:80:49 - error TS2322: Type 'boolean' is not assignable to type 'string'. 80 const pokemon: string[] = ["pikachu", "Raichu", false];
Это полезно, так как нам не приходится заботиться о типе данных для каждого элемента массива. Кстати, можно записать тип данных и по-другому. Это такой же код, как и на примере выше.
const pokemon: Array = ["pikachu", "Raichu", "Charizard"];
Следующим типом данных будут generics(дженерики). Это обширный тип данных. После создания дженерик типа, мы можем определить его. Пример кода ниже.
// Определяем тип данных для массива как дженерик type Pokemon = T[]; // После, мы можем указывать любой тип данных const pokemon: Pokemon = ["pikachu", "Raichu", "Charizard"]; // Тоже самое, что и код выше const pokemon: string[] = ["pikachu", "Raichu", "Charizard"];
Мы можем указывать разные типы данных для дженериков.
Это не особо хороший пример кода, но довольно легкий для понимания как дженерики работают.
// Определяем тип данных для массива как дженерик type Pokemon = T[]; // После создания дженерика, мы можем выбрать любой тип данных const pokemon01: Pokemon = ["pikachu", "Raichu", "Charizard"]; const pokemon02: Pokemon = [6, 14, 16]; const pokemon03: Pokemon = [true, true, false];
Что такое union?
При использовании union, вы можете указывать сразу несколько типов данных. Пожалуйста, посмотрите на пример кода.
let pokemon: (string | number) = "pikachu"; // OK pokemon = 6;
Этот код отработает правильно, т.к. переменная pokemon может быть как строкой, так и числом. Но код ниже не верен
let pokemon: (string | number) = "pikachu"; pokemon = 6; pokemon = false; // Не ок
Так как переменная pokemon не может принимать в себе тип данных Boolean, то компилятор выдаст ошибку. Если же вы хотите создать массив, в котором будет использоваться несколько разных типов данных, то вы можете также использовать union.
Пример кода.
// массив с использованием union let pokemon: (string | number)[] = ["pikachu", "Raichu", 6, 14];
Этот код верный. Но, если мы добавим другой тип данных, мы получим ошибку.
typescript.ts:105:65 - error TS2322: Type 'boolean' is not assignable to type 'string | number'. 105 let pokemon: (string | number)[] = ["pikachu", "Raichu", 6, 14, false];
Если вы будете добавлять в массив значения с разными типами, то union ваш выбор.
Что такое tupple?
Tupple – это точный тип данных.
Для начала, давайте взглянем на пример.
let pokemon: [string, number] = ["pikachu", 6];
Этот код сработает отлично. Данный тип данных, tupple, позволяет нам указывать только 2 элемента, строку и число, в определенном порядке.
Сейчас я вам покажу что будет, если указывать данные с ошибками.
typescript.ts:109:36 - error TS2322: Type 'number' is not assignable to type 'string'. 109 let pokemon02: [string, number] = [6, "pikachu"]; // Не ок ~ typescript.ts:109:39 - error TS2322: Type 'string' is not assignable to type 'number'. 109 let pokemon02: [string, number] = [6, "pikachu"]; // Не ок ~~~~~~~~~ typescript.ts:110:47 - error TS2322: Type 'string' is not assignable to type 'number'. 110 let pokemon03: [string, number] = ["pikachu", "text"]; // Не ок ~~~~~~ typescript.ts:111:5 - error TS2322: Type '[string, number, number]' is not assignable to type '[string, number]'. Source has 3 element(s) but target allows only 2. 111 let pokemon04: [string, number] = ["pikachu", 6, 14]; // Не ок
Тип данных Tupple это сама точность. И, в данном случае, это позволяет нам легко понять предназначение массива, и что он вмещает только 2 элемента. Первый, это строка, а второй, это число.
Выводы
В данном посте я описал базовые типы данных TypeScript’а.
Если вы хотите изучать typescript, то вы можете посмотреть на npm пакеты, созданный на typescript, а также будете писать более читаемый и поддерживаемый код.
Если вы работаете в компании, то знаете, как много кода может быть. Так что, вам приходится читать, а также понимать его в больших количествах. TypeScript помогает понимать код!
Спасибо что потратили своё время на прочтение данного поста.