Обновить

Зачем использовать статические типы в JavaScript? (Преимущества и недостатки)

Время на прочтение15 мин
Количество просмотров19K
Всего голосов 16: ↑14 и ↓2+10
Комментарии29

Комментарии 29

Мне кажется, что аннотации типов будут кушать в разы меньше места чем тривиальные юнит-тесты, проверяющие типобезопасность. Так что всё равно net gain.

НЛО прилетело и опубликовало эту надпись здесь
Вообщем из статьи можно вывести что достоинство использования динамической типизации только в том что новичкам легче язык изучать.

По моим скромным личным наблюдениям на ниве питона.
Динамика облегчает жизнь где-то до 500 строк. Но чем дальше проект от 500 строк (вверх), тем сильнее она портит жизнь.

А кто знает, уже починили спреды?

НЛО прилетело и опубликовало эту надпись здесь
нет
Скрытый текст
type Spread = {
	foo : string
	bar : string,
}

const obj1 = {
	foo : '22'
};
const obj2 = {
	bar : '22'
};


const spread : Spread = {
	...obj1,
	...obj2,
	// Далее можно вставлять что угодно - компилятор не ругается
	anyProp : 'bar',
	anyProp2 : 'foo'
};
НЛО прилетело и опубликовало эту надпись здесь
Все аргументы в стиле «1 кг сельдерея в день снижает риск образования бляшек на 14%!»
НЛО прилетело и опубликовало эту надпись здесь

Во-втором примере ничего не изменилось. Все также непонятно какие методы оплаты доступны. Если использовать статическую типизацию, то почему бы не делать это до конца?

А, все, дочитал до нужного момента. Вопрос снят.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Скорее всего минусы не за комментарий в целом, а за упоминание JSDoc, который многие не любят, особенно в противовес наглядных типов, которые так и так пишутся, а jsdoc еще надо заставить себя написать
То есть функция которой требуется документация хуже чем которой не требуется, даже если они делают одно и тоже.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
«Портянки» появляются в основном ради компилируемости бесконечного множества легаси-кода на JS.
НЛО прилетело и опубликовало эту надпись здесь
Преимущество № 2: У вас появляется живая документация

Является ли quote числом? Или логическим значением? Платёжный метод — это объект?

Венгерская нотация?

Все преимущества сводятся к одному — воможность четкого (гарантированно верного) автоматического анализа кода, по сути эмуляция компиляции (TypeScript). По сути это уже не скриптинг. И это очень большое подспорье как минимум в случае больших проектов и распределенных команд.

Мой доклад на NodeJS SPB: «Нужен ли мне TypeScript» как раз по теме статьи.

Видео: https://youtu.be/Yxsf06JSGCE?t=3h9m49s ((с 3:09:49)
Презентация: https://easy-deep-learning.github.io/types-sugar-in-javascript/

Если кратко: есть более полезные практики, которые имеет смысл внедрить ДО «статической» типизации:
  • покрытия тестами
  • соглашение по стилю кода, особенно наименованию переменных
  • jsDoc — Совершенные редакторы могут проверять код по jsdoc. При этом, на мой взгляд, код не загрязняется визуально «типизацией» (кавычки, потому что «типизация» в JS — только сахар.

Цитируя одного уважаемого докладчика: "говорят, что в природе есть проект, который поддерживает JSDoc в консистентном состоянии на 100%, но я такого не видел".

type Paypal = { id: number, type: 'Paypal' };
type CreditCard = { id: number, type: 'CreditCard' };
type Bank = { id: number, type: 'Bank' };
type PaymentMethod = Paypal | CreditCard | Bank;

Сомнения адепта TS:
type PaymentMethod = { id: number, type: 'Paypal' | 'CreditCard' | 'Bank' };

Не?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации