[key: string]: string;
prop: ISomeInterface;
}
ругается на prop дескать негодный он и не похож на string
переписываю
interface IMyHash {
[key: string]: string | ISomeInterface ;
prop: ISomeInterface;
}
но тогда уже ругается на поля внутри prop
prop.lalala - дескать фигня не похожая на string | ISomeInterface
чо ему надо?
как написать чтоб не придирался?
))))
У тебя 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 проблем нет, и эта разница нивелируется.
Обсуждают сегодня