Nano Hash - криптовалюты, майнинг, программирование

Свойство '_popup' не существует для типа 'Marker‹any›'

Итак, я создаю карту, используя angular и leaflet. Одна из вещей, которые я использую, — leaflet.markercluster. Когда я нажимаю на кластер, я хочу, чтобы всплывающее содержимое случайного маркера кластера было записано где-то. Чтобы получить доступ к всплывающему содержимому некоторого случайного кластера, я сделал следующее:

 cluster.getAllChildMarkers()[0]._popup._content

и получил ошибку: Свойство "_popup" не существует для типа "Маркер".

Но дело в том, что если я делаю ng serve в первый раз, он не компилируется, но если я что-то изменю и сохраню, он успешно скомпилируется с ошибками, и я смогу увидеть содержимое всплывающего окна.

Кроме того, если я делаю console.log(cluster.getAllChildMarkers()[0]) и проверяю элемент на веб-странице, я получаю обычный консольный журнал маркера с latlng и всеми другими атрибутами, включая _popup.

Кто-нибудь знает, почему typescript/vscode регистрирует ошибку, но консоль html видит ее нормально?


Ответы:


1

Поскольку TypeScript является более строгим, чем JavaScript, он предупреждает вас о потенциальных проблемах, которые на самом деле могут нормально работать после переноса в JS.

В данном конкретном случае это происходит просто из-за того, что псевдоприватные свойства (_popup следует обычному соглашению библиотек JS об использовании префикса подчеркивания _ для обозначения псевдоприватных членов), не объявленные в типах TS Leaflet, поскольку вы не должны используй их.

Но, конечно, это все еще технически допустимо в JS, поэтому вы можете сказать компилятору TS, что я знаю, что делаю, используя директиву комментария //@ts-ignore чуть выше этой строки.

Или дольше, но намного лучше, так как вы можете оставаться под присмотром TS: используйте настоящий API-интерфейс Leaflet для достижения того, что вы делаете:

cluster.getAllChildMarkers()[0].getPopup()?.getContent()
24.02.2021
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..