169 похожих чатов

Всем привет! помогите пожалуйста побороть описание хэша interface IMyHash {

[key: string]: string;
prop: ISomeInterface;
}
ругается на prop дескать негодный он и не похож на string
переписываю

interface IMyHash {
[key: string]: string | ISomeInterface ;
prop: ISomeInterface;
}
но тогда уже ругается на поля внутри prop
prop.lalala - дескать фигня не похожая на string | ISomeInterface
чо ему надо?
как написать чтоб не придирался?

34 ответов

7 просмотров

))))

У тебя prop же это ISomeInterface, а не string

нет ну правда, чо он??

ну и как мне описать мой хэш где все ключи строковые а prop имеет интерфейс ISomeInterface? (сложно и не очевидно все в ts)

interface A { prop: ISomeInterface } interface B { [key: string]: string } type C = A | B

описание понравилось, к сожалению помочь не могу(

Тебе нужно чтобы prop был ISomeInterface, а остальные atring или кае?

да именно так

https://www.typescriptlang.org/play?#code/C4TwDgpgBAkgggWwHIHthwMrAE4EsB2A5lALxQDeAUFDVAIYIwBKEdANmyAFxQDOOBQgG5KAXxGVQkKAAk6vABakKUANoBrCNz4CiAXR788RIVFFQAZCrDYUYHvGRpMu4uMqUAJhADGbOtjQPij4-FC4iFjYdEQQqPgyKAgohBD4ECgArrxyijy5ChLBocBQAEaZwI5RgsoRCFExqfGJyanpWTnyCqoA5CB0IL16IsVhwApZhAqOqKVk9Y2xLUkpaRnZBX02dsNCQA

спасибо! а интерфейсом такие штуки ника не описать?

В хэндбуке TS зачем-то написано, цитирую, Because an interface more closely maps how JavaScript objects work by being open to extension, we recommend using an interface over a type alias when possible. Удаление из хэндбука этой строчки вкупе с удалением из головы сакрального знания о существовании в TS ключевого слова interface делает жизнь намного лучше, утренний воздух свежее, а женщин красивее, рекомендую.

эх...! а меня то в детстве дурили - говорили жизнь прекрасна! )

а волосы? волосы будут шелковистее?

Только у тех самых женщин!

меня это не устраивает ☹️

а чё там?

Интерфейс/interface — соглашение Тайпы/type (сокращение от type aliase) — местоимение. Например, ты Вадим, но во дворе тебя принято называть Вад. Это будет пример type aliase. const vadim: Person; type Vad = Person; const vad: Vad = vadim; В паспорт можно вписать только ФИО — это пример интерфейса, потому что соглашение interface FullName {…}

а тип - не соглашение?

Выше пояснение перечитай

аналогия - не пояснение

В своём 7Б на физике или геометрии скажи так)

кого ещё ты здесь попытаешься задеть?

Почитай о разнице между interface и type в ts, а не в книжках про ООП (я заострю твоё рассеяное внимание на том, что я не предлагал отказаться о интерфейсов вообще, а ограничил свое заявление TS), потом сходи проспись, подумай, помой рот с мылом, и вот на этом моменте, думаю, вопрос будет закрыт.

я так понимаю основная разница: интерфейс - расширяется тип - нет

На не пройденном собесе так скажешь. Удачи))

Разница в смысле использования. Type для переименования чего-то. Interface для соглашения о чём-то

так, вот смотри: получаю я запросом список объектов. item[] type item = { a:stribg } если к классам я иду, пишу интерфейс чтобы его потом реализовать. получается реализация интерфейса = соглашение = применение в классах а типы в данных и объектах?

Тролля я кормить прекращу, а по существу отвечу. Концептуальная разница возможностей на текущий момент такова: Интерфейсы поддерживают declaration merging (нужный, преимущественно, для поддержки тайпскриптом хреново задизайненных библиотек a là жквери с плагинами) и явное указание реализации классом интерфейса (что полезно, но в силу структурной типизации не обязательно). Типы не поддерживают вышеперечисленное, однако же поддерживают юнионы, что полезно, позволяют колотить меньше клавиш, оставляя гораздо больше времени на искрометные срачи, mapped types, conditional types, and so on and so forth. Типы великолепно расширяются с использованием &, предоставляя при этом значительно больше возможностей, чем экстенд одного интерфейса другим.

Я не понял. То есть, интерфейсом можно описать библиотеки с кодом на js, а тайпами нет?

В TS слово type сокращение от словосочетания type alise (дословный перевод —местоимение типа). Нас русскоговорящих это сбивает с толку, потому что мы переводим это слово как просто тип, опуская слово местоимение, но type это НЕ ТИП, это МЕСТОИМЕНИЕ для ТИПА. Разработчиками тайпскрипта, чтобы не писать длинное название typealias решили писать коротко type. Например, чтобы не вводить людей в заблуждение в Swift пишут не type, а typealias. В Swift typealias Employee: Person let employee: Employee В TypeScript type Epmloyee: Person let employee: Epmloyee Суть для type дать местоимение. Когда ты пишешь type item: {a: string} ты переименовываешь тип данных {a: string}. Заметь тип данных {a: string} можно использовать везде, но это не удобно, проще дать ему прозвище Item. Отсюда у тебя и получается type Item = {a: string}; let item: Item

воу

ну только псевдоним всё же

Ещё небольшое практическое различие интерфейсов и типов — вроде бы сравнивать интерфейсы компилятору быстрее и проще, чем типы-пересечения, поэтому авторы TS рекомендуют по возможности использовать интерфейсы вместо пересечений типов (только в целях ускорения проверки типов). Хотя обычно со скоростью работы tsc проблем нет, и эта разница нивелируется.

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
если загрузчик efi? если сама PML4 PDPT PDT PT лежит в неудобном для меня месте?
Vi Chapmann 🪙
8
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта