
Dmitry
23.03.2018
07:05:10
Всем привет. Друзья, подскажите пожалуйста почему не рекомендуется именовать интерфейсы с префиксом I?

Дмитрий
23.03.2018
07:11:55
Потому что это не несёт абсолютно никакого профита
Эта странная необходимость вызвана лишь тем что тс не различает импорт типов и объектов и первые захотелось выделить хоть как-то
Но это всё равно в такой форме не работает

Google

Alex
23.03.2018
07:16:39

Дмитрий
23.03.2018
07:16:58
Да, но это днище же

Евгений
23.03.2018
07:17:37

Дмитрий
23.03.2018
07:17:50
Традиция тянется откуда то с до диеза

Alex
23.03.2018
07:19:02
+ можно создать интерфейс
ICircle и реализацию Circle
+ когда начинаешь писать имя интерфейса для реализации в классе в подсказке будут только интерфейсы?

Евгений
23.03.2018
07:19:24

Дмитрий
23.03.2018
07:19:41
Зачем мне в подсказке ВСЕ интерфейсы?
Не релевантные от слова вообще

Alex
23.03.2018
07:20:07

Дмитрий
23.03.2018
07:20:12
Лол

Dmitry
23.03.2018
07:20:33
Обозначайте через I это best practices
Здесь https://angular.io/guide/styleguide#interfaces говорится что так делать не надо, со ссылкой сюда - https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines
А там просто сказано что это плохо и всё

Дмитрий
23.03.2018
07:20:41
Код должен быть связан по смыслу, в том числе семантически

Google

Alex
23.03.2018
07:20:46

Maxim
23.03.2018
07:20:46
Так идёт поиск по тому что ты вводишь а не по тому что ты подумал

Dmitry
23.03.2018
07:20:47
Хотя в имени очевидно что это интерфейс.

Дмитрий
23.03.2018
07:21:07

Dmitry
23.03.2018
07:21:39
Чем плохо IHero или HeroInterface?

Дмитрий
23.03.2018
07:21:58
Да
Эта странная необходимость вызвана лишь тем что тс не различает импорт типов и объектов и первые захотелось выделить хоть как-то
То что нет import type это и есть дно

Dmitry
23.03.2018
07:22:47
Но программисту то что делать?

Alex
23.03.2018
07:22:50
А при чем тут тс, это общая практика для многих языков

Дмитрий
23.03.2018
07:23:11
И это не повод форсить уродливый нейминг

Dmitry
23.03.2018
07:23:19
Нужно же как-то обозначить интерфейс, иначе может быть банально конфликт имён с классом или тем что он должен декларировать.

Дмитрий
23.03.2018
07:23:38
А давайте все переменные называть с V
А классы с C
А чо нет то

Дмитрий
23.03.2018
07:23:59

Dmitry
23.03.2018
07:24:09
Ок.

Дмитрий
23.03.2018
07:24:15
ЗАТО ПОНЯТНО ВСЕ ПОДСКАЗКИ ЕСТЬ

Google

Дмитрий
23.03.2018
07:24:19
и убрать эти var let и const, они не нужны

Дмитрий
23.03.2018
07:24:29
Во во)

Дмитрий
23.03.2018
07:24:35

Dmitry
23.03.2018
07:24:38
Объясни как ты назовёшь интерфейс для класса Hero?

Дмитрий
23.03.2018
07:24:51
Hero
Я не буду плодить сущности

Dmitry
23.03.2018
07:25:05
А конфликта не будет?)

Alex
23.03.2018
07:25:06
Конкуренция названия?

Дмитрий
23.03.2018
07:25:07

Дмитрий
23.03.2018
07:25:14
Во во

Alex
23.03.2018
07:25:26
Кек

Дмитрий
23.03.2018
07:25:33

Dmitry
23.03.2018
07:25:37

Дмитрий
23.03.2018
07:25:52
Потому что это важно

Дмитрий
23.03.2018
07:26:06
Ну как бы да, это абсолютно разные вещи)

Maxim
23.03.2018
07:26:19
Вообще тут дело в том что впринципе насрать как называть. Как скажут сверху так и пиши. Но вот какого куя нельзя назвать i я так и не понял. А если у меня слово на i начинается

Евгений
23.03.2018
07:26:28

Тимофей
23.03.2018
07:28:31

Дмитрий
23.03.2018
07:28:43
Да и вообще это не дно, это норм, как по мне))

Google

Тимофей
23.03.2018
07:29:17

Дмитрий
23.03.2018
07:29:18
Почему вообще я должен с чего-то вдруг еще указывать что именно я импортирую
пусть тогда были бы import const, import сlass
абсурд же

Alex
23.03.2018
07:29:58
У меня есть интерфейс и два класса которые реализуют его по разному, т.к. Я использую интерфейс для обозначения типов переменных и аргументов функций у меня нет привязки кода к конкретным пеализациям, а рефпкторинг охватывает все реализации

Дмитрий
23.03.2018
07:30:18
зачем интерфейс? почему не сделать абстрактный класс

Alex
23.03.2018
07:32:38
Затем, что мне не нужна привязка к реализации, я хочу иметь возможность использовать разные реализации без изменения кода

Дмитрий
23.03.2018
07:32:58
Абстрактный класс?

Евгений
23.03.2018
07:33:57

Дмитрий
23.03.2018
07:35:45
Нет,наоборот абстрактные классы нужны крайне редко, интерфейсы и то чаще

Alex
23.03.2018
07:35:48
Абстрактный класс?
Абстрактный класс может иметь реализации, опять же повторяю, я хочу этого избежать

Дмитрий
23.03.2018
07:36:22

Alex
23.03.2018
07:36:34
И да как сказано выше, назначение у абстрактных классов другое
Но ведь может и не иметь
Если нет не одной реализации то какой смысл в абстрактном классе? Получается интерфейс, не? Или я что-то не понимаю

Dmitry
23.03.2018
07:37:47
В общем друзья я понял мысль. Проверил, действительно конфликтов имён не может быть.
По этому вполне разумно.

Дмитрий
23.03.2018
07:37:59

Alex
23.03.2018
07:39:06

Евгений
23.03.2018
07:39:40

Google

Dmitry
23.03.2018
07:40:01
В плане?
Ну здесь же был троллинг по поводу глупости обозначения в имени интерфейса что это интерфейс. Мол а давайте и переменные именовать с префиксами.
Вот да, я думал имена будут конфликтовать. Если нет, тогда всё отлично.

Alex
23.03.2018
07:41:18
Если в одном файле есть импорт и класса и интерфейса с одинаковым названием Box, при объявлении переменной типа Box не будет конфликта?

Dmitry
23.03.2018
07:49:39

Alex
23.03.2018
07:50:29

Dmitry
23.03.2018
07:52:53
Duplicate identifier 'A'.
Если что-то импортнуть а что-то объявить, тогда не бдует конфликтов.
А если попытаться импортировать 2 сущности с одинаковыми именами, то разумеется будет конфликт и это логично.

Kirill
23.03.2018
08:15:07
Можно ли сейчас как-то настроить ts/tslint, чтобы неиспользуемые переменные подсвечивались в vscode, но не прерывали компиляцию?
Укажи тип у одной интерполяции
А тип для темы как указывать чтобы подхватывалось после одной интерполяции?
Добавил в тип пропсов поле theme (по сути повторил вручную тип ThemedStyledProps) с типизацией для темы и вторая интерполяция не подхватывает тип пропсов.

Тимофей
23.03.2018
09:27:29

Kirill
23.03.2018
09:28:39

Дмитрий
23.03.2018
09:28:42
Типизируются SC всё же отстойно, фактически никак
То что они называют "Caveat" это банально огромная проблема их подхода самого по себе

Тимофей
23.03.2018
09:30:56

Дмитрий
23.03.2018
09:31:15
Далеко от идеала
Потому что template literal functions это совершенно особый кейс в жс со своим типом, что накладывает ограничения и вызывает проблемы само по себе, как ни крути
С этим можно жить, но это по прежнему отстойно и такие вещи замалчивать нельзя)

Тимофей
23.03.2018
09:32:23

Дмитрий
23.03.2018
09:33:24
Глава Caveat with Stateless Components вкратце формулируется как "наши компоненты не имеют вывода типов от слова вообще, deal with it"