Беглый обзор JavaScript и TypeScript
JavaScript
Язык был создан инженером Netscape Бренданом Эйком в 1995 году за 10 дней. В то время название языка варьировалось между JavaScript, Mocha, LiveScript или JScript (альтернативная версия языка от компании Microsoft). В результате многочисленных споров и обсуждений внутри компании Netscape было решено, что новый язык должен быть похож на Java и, можно даже сказать, что JavaScript был назван в его честь.
Основная идея была в том, чтобы создать «лёгкий для написания скриптов» язык для создания виджетов, простых компонентов и HTML-манипуляций. Термин «язык сценариев» означает высокоуровневый интерпретируемый язык программирования.
В числе прочих характеристик JavaScript также является динамическим и слабо типизированным. То есть, переменные могут легко менять тип присваиваемых значений. Например:
– Boolean – логический тип с возможными значениями true или false; – Number – числовой тип данных. Помните, что JavaScript поддерживает только числа с плавающей точкой и 0.99999999999999999 === 1; – String – строки, которые можно декларировать с помощью всевозможных символов кавычек ', " или `; – Object – сложный тип данных, который часто ассоциируют с понятием JSON.
Два других типа данных null и undefined крайне занимательны тем, что, хотя оба означают пустое значение, тем не менее, несут разные смыслы:
– Null – означает, что переменная не содержит значение; – Undefined – означает, что переменная не определена.
И последний, недавно добавленный тип: – Symbol – помогает решать задачи связанные с приватностью данных.
Под динамической природой языка часто подразумевает возможность приведения типов данных на лету:
a = 1 // присвоить 1 к переменной a a == true // верно a == '1' // верно a == [1] // верно a === true // неверно
и много других забавных примеров.
Возможность слабой типизации JavaScript удобно использовать для создания динамических объектов и свойств, но порой она привносит в код двусмысленность и плохую читабельность:
function doSomething(data) { let callback if (typeof data === 'function') { callback = data } // ... callback() }
TypeScript
Язык, который компилируется (или, транспилируется) в стандартный JavaScript. Также TypeScript позволяет опционально описывать типы. Рассмотрим пример:
function sum(a, b) { return a + b }
Выражение sum(true, false) валидно в JavaScript. Угадайте, чему равен результат?
В TypeScript с помощью символа «:» можно явно указать, какие типы данных ожидаются в качестве аргументов, параметров или типов возвращаемого значения функции:
function sum(a: number, b: number): number { return a + b }
В таком случае выражение sum(true, false) будет распознаваться как «неправильное» из-за использованных не-number значений.
Так как TypeScript – язык-надмножество JavaScript, то все основные типы также в нём доступны:
– boolean, number, string; – arrays, tuples - могут быть указаны в различных нотациях.
const a: Array<number> = [3, 1, 4] // или const b: number[] // и const c: [string, number] = ["hello", 10]
Также null and undefined доступны и обычно могут быть использованы как «нулевые» значения к любым типам данных (не в случае флага компилятора --strictNullChecks)
Другие интересные типы:
– any – для неизвестных типов данных переменных; – void – отсутствие возвращаемого значения в функции; – never – означает, что функция всегда выкидывает исключение и никогда не возвращает значение.
Количество инструментов и программ, написанных на или для языка TypeScript постоянно растёт. В качестве примеров можно привести:
Visual Studio Code – бесплатное IDE с открытым кодом, созданное компанией Microsoft; deno – недавно представленный v8-TypeScript движок, который в будущем может составить конкуренцию Node.
Полезные материалы: – Brendan Eich - Popularity - 3 of April, 2008 – Wat - A lightning talk by Gary Bernhardt from CodeMash 2012 – TypeScript - Basic Types – TypeScript - Advanced Types – TypeScript runtime built on V8
Есть вопрос? Напишите в комментариях!