Обзор на Typescript
Вы хотели писать на javascript
но динамическая типизация путала вам карты и кидала ошибки в рантайме? Typescript
идет на помощь! В нем любое javascript
значение может быть типом, единственным элементом которого это значение и будет... Причем получить это значение имея только тип невозможно... Ну и ладно, нам это не нужно, верно, у нас типы будут иметь более одного значения!
Пусть наш тип это что-нибудь типо
let x: string /*(1)!*/ | 'string' /*(2)!*/ | HTMLElement /*(3)!*/ | string[] /*(4)!*/ | HTMLElement[] /*(5)!*/ | undefined
- текстовый узел
- фиксированная строка, которую хочется отображать зеленым
- единственный элемент
- массив строк, которые хочется отображать как простой список
- массив элементов
Обычный такой тип, казалось бы, что в нем такого. Попробуем написать простенькую программу, чтобы вывести тип элемента x
: если это строка, то вывести "string"
, если 'string'
, то "'string'"
, и тд.
В нормальных языках это легко реализуется с помощью конструкции type switch или pattern matching-а. Но у нас typescript
, поэтому код будет выглядеть примерно так:
if (x === "string") /*(1)!*/ {
return "'string'"
} else if (typeof x === "string") /*(2)!*/ {
return "string"
} else if (x instanceof HTMLElement) /*(3)!*/ {
return "HTMLElement"
} else if (Array.isArray(x)) /*(4)!*/ {
if (x.length>0) /*(5)!*/ {
return (typeof x[0] === "string") ? "string[]" : "HTMLElement[]"
} else {
return "either string[] or HTMLElement[], can't guess til it's empty"
}
} else if (x === undefined) {
return "undefined"
}
- если
x
-"string"
, тип с единственный элементом, поэтому просто проверка на равенство - если
x
-string
, элементарный тип, поэтомуtypeof
- проверка на тип-класс, поэтому
instanceof
- проверка, если массив (чего-то)
- если есть хотя бы один элемент, мы можем взять первый элемент, чтобы проверить тип, ибо без значения типа невозможно узнать тип.
Вы можете спросить: а зачем я написал | undefined
в обьявлении типа, если все типы и так содержат undefined
? Просто, чтобы это было более явно, в реальном коде конечно же не стоит так писать, а просто нужно проверять ВСЕ параметры на undefined
.
На этом обзор заканчивается, как видите typescript
это хорошее продолжение javascript
, в котором не смогли ни нормально реализовать типизацию, ни сделать то, для чего бы он мог пригодиться - давать автокомплит, так как типы енфорсятся транспайлером. Проверки типов консистентные и простые.
Моя оценка языку
typescript
0/10
UPD: поступила критика в защиту языка typescript
. В общем и целом, она сводится к следующим пунктам:
- Автор глупый, удали, не позорься.
- Сам дурак, что делаешь union из 6 типов. Так никто не делает.