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

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

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

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

34 ответов

26 просмотров

))))

У тебя 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 проблем нет, и эта разница нивелируется.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта