Что следует знать для хорошего кода на TypeScript для Node.JS?
Simple Node.JS ES6 TypeScript static web server - выкладываю на ревью сообществу как пример моего кода. Это мой первый проект на ноде. Что стоит исправить и что почитать для лучшего понимания? Какие ошибки видны сразу, какого подхода стоит придерживаться и что улучшить?
До этого работал с PHP, про веб знаю достаточно :)
Планирую добавить интерфейсы, исправить некоторые типы и JSDoc к ним.
1. Нет никаких особенностей в работе TS с Node.js. Хороший код - он везде хороший, что в ноде, что на клиенте. Плохой тоже.
2. Классы ради классов. Зачем?
3. Зачем JSDoc, если есть интерфейсы?
4. Никогда, никогда не расширяйте нативные интерфейсы.
5. "про веб знаю достаточно" - достаточно для чего?
6. let {0: key, 1: val = null} = arg.split('=', 2); - Оригинально. Почитайте про деструктуризацию массивов.
Дмитрий Королёв:
1. В контексте сервера могут применяться отличные от клиентских подходы, я полагаю.
2. Согласен. Но в будущем, скорее всего, это пригодится. Не смешивать же все приватные методы в кучу с публичными.
3. Я ещё не до конца понимаю смысл ни того ни другого.
4. Вы про Array? Я могу заменить свой last() на нативный pop(), результат тот же. Мне удобно расширять интерфейсы, но, видимо, это сродни jQuery - надо быстрее перестать. А что вы предлагаете?
5. Я имел в виду достаточное понимание клиент/серверного взаимодействия чтобы не совершать грубых ошибок.
6. Про деструктуризацию читал, иначе бы не смог написать подобный код. А как бы вы написали? Я пытался всунуть знак вопроса куда только можно вместо этого null, но парсер не пропускал. А индексы стоит убрать?
Довольно часто я встречаюсь с подобной критикой, когда ошибки явно указаны, но что делать дальше - непонятно.
Вадим Егоров: в контексте сервера, разумеется, могут применяться отличные подходы, хотя бы потому что сервер запущен постоянно, а клиентский код - только пока открыта страница (если на время забыть про сервис-воркеры). Но вы же спрашиваете не про отличия клиента от сервера, вы спрашиваете про отличия в работе с TS на клиенте и сервере. И таких отличий нет.
JSDoc имеет смысл, если, к примеру планируется автогенерация документации к коду или просто нужна какая-то понятная система комментирования кода. В таких случаях JSDoc незаменим. Использовать JSDoc только для описания интерфейсов - оверхед, а в TS еще и бессмысленно чуть более, чем полностью.
Ваш last не равнозначно заменяется на pop, потому что pop мутирует исходный массив (собственно, удаляет из него последний элемент). Last - это нормальная функция, но не в прототипе, а сама по себе:
const last = <T>(arr: T[]): T => arr[arr.length - 1]
.
Вы деструктурируете массив, как объект. А нужно как массив: let [key, val = null] = arg.split('=')
Вадим Егоров: javascript (и ts тоже) тем и замечателен, что с ним можно работать, придерживаясь как императивного подхода, так и функционального. При этом не существует каких-то особых паттернов, применительных исключительно к JS. Книга за авторством банды четырех актуальна в любом языке =)