Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 February 26

ЕВ

Евгений Войтенко... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
ТС тоже тот еще костыль
буду благодарен за статью от вас или где еще, с фактами в чем минусы ts.
источник

VS

Vlad Sobenko in NodeUA - JavaScript and Node.js in Ukraine
Дмитрий
Говорят бойлерплейт 🌚🌚🌚🌚
Я бы боялся не бойлерплейта, а сложной поддержки кода.
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Расскажу позавчерашнюю историю про тайпскрипт и почему я совсем ему не доверяю. Опять же с реального проекта

Проект. был type UserMetadata который был просто объектом с определёнными ключами

type Metadata = {}
type UserMetadata = { [key: string]: Metadata }
источник

Д

Дмитрий in NodeUA - JavaScript and Node.js in Ukraine
Vlad Sobenko
Я бы боялся не бойлерплейта, а сложной поддержки кода.
Аналогично
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
в процессе рефакторинга у UserMetadata поменялся тип
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
стал type UserMetadata = Map<string, Metadata>;
источник

VS

Vlad Sobenko in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Это пример уже описанного интерфейса, который вы можете реализовать в своем объекте и получить возможность итерироваться по нему.
А какие типы будут выводиться при итерации, совсем не понятно.
источник

Д

Дмитрий in NodeUA - JavaScript and Node.js in Ukraine
Плюс бойлерплейт решается автогенерацией
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Тайпскрипт радостно подсветил все экземпляры вызовов вида cache['foo']
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
и их переписали на cache.get('foo')
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Но проект в рантайме посыпался... Оказалось
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
где-то в глубине проекта было такое:

const cache: UserMetadata =  ...

// 30 файлов спустя
const cacheCopy: UserMetadata = { ...cache };
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
для cacheCopy тайпскрипт тоже заставил все поправить на .get
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
вот только cacheCopy это не Map
источник

VS

Vlad Sobenko in NodeUA - JavaScript and Node.js in Ukraine
Illya Klymov
для cacheCopy тайпскрипт тоже заставил все поправить на .get
А в каком языке с типами нет хаков, чтобы заглушить проверку, поставить игнор или что то подобное?
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
А где здесь хак?
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
В этом как раз и суть, код написан без хаков
источник

VS

Vlad Sobenko in NodeUA - JavaScript and Node.js in Ukraine
Illya Klymov
А где здесь хак?
Ну зделсь нет. Просто с хаками такое может выдать любой язык типизированный.
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Когда я пишу хак - я осознанно отступаю от языка (тот же unsafe в Rust)
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
но когда я пишу ВАЛИДНЫЙ код - я ожидаю что ошибка будет поймана
источник