Size: a a a

TypeScript — русскоговорящее сообщество

2020 March 24

AK

Andrey Kurnoskin in TypeScript — русскоговорящее сообщество
Timofey Goncharov
напрягает то, что трудно понять. Theme - это какой-то класс и его предназначение - создавать экземпляры и обращаться к полям. или его предназначение - описать какой-то тип. и это важно понимать в момент использования.
Да нет, неважно
источник

AK

Andrey Kurnoskin in TypeScript — русскоговорящее сообщество
Предназначение — что типа, что интерфейса, что класса, для внешних потребителей — задать контракт.
источник

TG

Timofey Goncharov in TypeScript — русскоговорящее сообщество
Andrey Kurnoskin
Предназначение — что типа, что интерфейса, что класса, для внешних потребителей — задать контракт.
источник

AK

Andrey Kurnoskin in TypeScript — русскоговорящее сообщество
Какая разница, каким механизмом этот контракт задан?
источник

AK

Andrey Kurnoskin in TypeScript — русскоговорящее сообщество
> For example, the contract of IList<T> says that when an item is added to the collection, the Count property is incremented by one.
Что не может быть выражено на уровне контракта типа IList<T>, и причина этому ровно одна — система типов в C# далека от идеала. Что это доказывает?
источник

TG

Timofey Goncharov in TypeScript — русскоговорящее сообщество
Andrey Kurnoskin
> For example, the contract of IList<T> says that when an item is added to the collection, the Count property is incremented by one.
Что не может быть выражено на уровне контракта типа IList<T>, и причина этому ровно одна — система типов в C# далека от идеала. Что это доказывает?
то что в контексте имеющейся системы типов, говорить о контрактах некорректно
источник

TG

Timofey Goncharov in TypeScript — русскоговорящее сообщество
Andrey Kurnoskin
> For example, the contract of IList<T> says that when an item is added to the collection, the Count property is incremented by one.
Что не может быть выражено на уровне контракта типа IList<T>, и причина этому ровно одна — система типов в C# далека от идеала. Что это доказывает?
в итоге твой аргумент "за" или "против" префикса I?
источник

AK

Andrey Kurnoskin in TypeScript — русскоговорящее сообщество
Если я заменю слово «контракт» на фразу «доступный API», станет легче? Против, он не несёт смысла.
источник

AK

Andrey Kurnoskin in TypeScript — русскоговорящее сообщество
Что он указывает? Он указывает, что мы сейчас работаем не с конкретной имплементацией. Зачем это знание нужно?
источник

TG

Timofey Goncharov in TypeScript — русскоговорящее сообщество
Andrey Kurnoskin
Что он указывает? Он указывает, что мы сейчас работаем не с конкретной имплементацией. Зачем это знание нужно?
нужно что бы понять, Theme был создан для создания экземпляров или для описания типов переменных
источник

AK

Andrey Kurnoskin in TypeScript — русскоговорящее сообщество
Зачем это нужно понять? В чём разница потребителю?
источник

TG

Timofey Goncharov in TypeScript — русскоговорящее сообщество
Andrey Kurnoskin
Что он указывает? Он указывает, что мы сейчас работаем не с конкретной имплементацией. Зачем это знание нужно?
если написать

interface A {
 b: Theme,
}


никаких ошибок не возникнет если Theme это Class и если Theme это просто перечисление строк. и в момент описания интерфейса можно ошибиться
источник

TG

Timofey Goncharov in TypeScript — русскоговорящее сообщество
Andrey Kurnoskin
Зачем это нужно понять? В чём разница потребителю?
и пока не заглянешь внутрь не поймешь что такое Theme
источник

AK

Andrey Kurnoskin in TypeScript — русскоговорящее сообщество
А можно ошибиться, и написать имя не того класса /типа, который имелся в виду. С этим как бороться?
источник

PS

Pavel Shakhov (pongo) in TypeScript — русскоговорящее сообщество
Timofey Goncharov
ide мне подскажет с чем я имею дело. со строкой или нет. а вот когда я использую тип для описания свойства, уже придется в ручную смотреть что такое Theme, это класс какой-то или нет
может тогда типы с маленькой буквы писать? как number, string
источник

TG

Timofey Goncharov in TypeScript — русскоговорящее сообщество
Andrey Kurnoskin
А можно ошибиться, и написать имя не того класса /типа, который имелся в виду. С этим как бороться?
ну я даже не про ошибку. а про необходимость заглядывать в Theme каждый раз когда его используешь. потому что не знаешь чем он является.
источник

TG

Timofey Goncharov in TypeScript — русскоговорящее сообщество
Andrey Kurnoskin
А можно ошибиться, и написать имя не того класса /типа, который имелся в виду. С этим как бороться?
вот ты работаешь с чужим файлом и он тебе предоставляет Theme.
у тебя нет не единого шанса понять для чего он нужен.
но если у вас на проекте линтер побуждает ставить префикс I или T. то получив Theme ты будешь уверен что это class и из него нужно создавать экземпляры.
источник

TG

Timofey Goncharov in TypeScript — русскоговорящее сообщество
Timofey Goncharov
вот ты работаешь с чужим файлом и он тебе предоставляет Theme.
у тебя нет не единого шанса понять для чего он нужен.
но если у вас на проекте линтер побуждает ставить префикс I или T. то получив Theme ты будешь уверен что это class и из него нужно создавать экземпляры.
следовательно нет необходимости заглядывать и смотреть что такое Theme
источник

AK

Andrey Kurnoskin in TypeScript — русскоговорящее сообщество
Да, только необходимость заглянуть и посмотреть, как его создать, что он из себя представляет, просмотреть его публичный API и так далее, это во-первых. Во-вторых, комбинаторный взрыв.
источник

PS

Pavel Shakhov (pongo) in TypeScript — русскоговорящее сообщество
Timofey Goncharov
вот ты работаешь с чужим файлом и он тебе предоставляет Theme.
у тебя нет не единого шанса понять для чего он нужен.
но если у вас на проекте линтер побуждает ставить префикс I или T. то получив Theme ты будешь уверен что это class и из него нужно создавать экземпляры.
а если Theme — это конструктор объектов, но не класс, а функция?
источник