Я пишу код весь рабочий день. Потому что всё строжайше типизированно.
А запускаю его только в конце дня.
...
...
...и
Убеждаюсь, что нихуя не работает. Да и мать бы его так, завтра пофиксим :)
Напоминает гибрид Go-шного defer с Python-овским with. Радует глаз, но ломает ESLint.
Если у вас есть некий REST API, для которого нет OpenAPI схемы.
Или, скажем, вы подписаны на SNS-события, которые вообще пока нет штатного способа документировать (AsyncAPI не предлагать, сырое говно).
Или просто надо валидировать (и одновременно документировать) некий JSON или YAML файл, создаваемый пользователем.
Или у вас есть для этого всего JSON-схема, но вы хотели бы иметь ещё и compile-time проверку на TypeScript соответствия живых данных этой схеме.
То просто возьмите Zod zod.dev
Zod отличается от других валидаторов (Ajv, Joi, validator-js, и даже class-validator) тем, что он нативно поддерживает TypeScript, и все runtime-валидации автоматически становятся и compiletime-валидациями. Такое нормально не реализзовано больше нигде. Есть ещё io-ts, но там скорее попытка притянуть функциональную философию Haskell в мир TypeScript, а так нормальные люди не пишут.
Конвертация zod-схем в json-схемы и обратно:
npmjs.com
npmjs.com
Короче, я на работе в нескольких сервисах прикрутил эту штуку, и теперь счастью моему нет предела.
Человек был явно не на своём месте. Недо-мидл там, где нужен был синьор. Криворукий исполнитель чужих решений там, где нужно было предлагать свои — и педалить их так, чтобы нам было стыдно.
Делать код-ревью за ним было все равно, что переделывать самому — настолько все там было написано убого и уныло. Не было смысла комментировать, ибо комментарев бы вышло больше, чем исправлений.
И да, на все грабли тайпскрипта он наступил. В том плане, что если надо например, реализовать что-то так, чтобы, к примеру, поля интерфейса или элементы enum невозможно было бы переименовать средствами IDE (ну, знаете волшебную клавишу "F2" aka "rename refactoring"?), то это к эфиопу. Превратить сильную типизацию в слабую — к нему же. Я когда пишу, я не задумываюсь над такими штуками, у меня на автомате аналитика происходит, потому что за годы уже выработалось интуитивное чувство языка. Когда я вижу кусок плохого когда, написанный мной, у меня как будто зуб ноет.
С эфиопским кодом я себя чувствовал как на приеме у стоматолога без анестезии.
Ну ничо. Теперь, говорят для федеральной полиции Аддис-Абебы пишет на сишарпе складской учёт оружия.
Я бы делал такое с платной подпиской на функцию "внеплановые списания". Надо будет предложить, код должен работать на программиста.
Если без шуток, то я хотел бы, чтобы люди писали на расте. Ведь мне кажется, с растовской системой типов меньше шансов налажать, чем с Go, и тем более с TypeScript. И если Go и TypeScript иногда снисходят к говнокодеру и как бы говорят: «лааадно, я отвернусь и сделаю вид, что не замечаю, а ты можешь писать, как на своих любимых PHP/Python/JS», то Rust садистски ухмыляется: «что, не получается? Слы, ебашь типы, блеать!». И делать нечего, гуглишь, мучаешься, но пишешь так, что в рантайме ошибка невозможна в принципе. Если, конечно, найдешь, кто проспонсирует это извращённое хобби.
@lurker #3008375
Это задача для лайвкодинга, решение которой я ожидаю от миддла примерно за полчаса реального времени.
Let’s develop a simple expression evaluator. It would return a result of an arithmetic evaluation of 2 simple operators: “plus” and “minus” given in a form of a simple syntax tree.
For example:
compute({ plus: [10, 7] }) should return 17.
compute({ minus: [10, 7] }) should return 3.
Естественно, решение должно быть строго типизированное.
Понятно, что function compute может принимать не один тип, а юнион типов. Понятно, что оно в рантайме должно проверять, что именно ему передали, потому что как иначе.
В продолжение темы для Это задача для лайвкодинга, решение которой я ожидаю от миддла примерно за полчаса реального времени.
Let’s develop a simple expression evaluator. It would return a result of an arithmetic evaluation of 2 simple operators: “plus” and “minus” given in a form of a simple syntax tree.
For example:
compute({ plus: [10, 7] }) should return 17.
compute({ minus: [10, 7] }) should return 3.
Естественно, решение должно быть строго типизированное.
Понятно, что function compute может принимать не один тип, а юнион типов. Понятно, что оно в рантайме должно проверять, что именно ему передали, потому что как иначе.
Кандидат оказался дуб дубом. Не смог даже простейшую функцию обернуть в промис.
Ничего не знает.
Это, между прочим, тот самый друг нашего СТО. Я старался натянуть ему оценку, чтобы он меня заменил, но даже при этом я не смог. Ну очень мало он знает.
Эх, завидую я людям, у которых есть друзья...
Unless you take specific measures to avoid it, the internal state of a const variable is still modifiable. Fortunately, TypeScript allows you to specify that members of an object are readonly
Да что же не так с этими ребятами?
Разработчиком языка TypeScript является Андерс Хейлсберг (англ. Anders Hejlsberg) создавший ранее C#, Turbo Pascal и Delphi
C#, Turbo Pascal и DelphiАХАХАХАХАХА! C# и Delphi создал один и тот же человек! Господи, какой ужас 0_o Моя жопа в огне!
C# и Delphi