Этот вопрос в конечном счете связан с T & U
и с тем, что делает пересечение типов.
Использует ли он конструктор T
или U
?Или ни то, ни другое?Это класс или интерфейс?Могу ли я по-прежнему создавать новые T & U
объекты с помощью конструктора?Будет ли экземпляр работать?Если T & U
имеет разные свойства, каждое из которых является обязательным, как мне создать новый объект T & U
?Вот почему я спрашиваю об этом, большое спасибо.
У меня есть google.maps.Marker.Я хотел добавить свойство id
к нему со строгой проверкой типов.Я подумал, что лучшим способом было бы расширить класс.Но проблема в том, что google.maps.Marker не загружается при расширении класса, что приводит к ошибке.Смотрите тему здесь .
Итак, я сделал там то, что было рекомендовано:
type IdMarker = google.maps.Marker & { id: string };
Это работает довольно хорошо.Итак, сначала я попытался создать новый idMarker из маркера, но он не скомпилировался из-за того, что у маркера нет свойства id.Я пытался добавить идентификатор при назначении маркера с помощью оператора распространения, но это не сработало.Поэтому я сделал id
необязательным id?
в вышеприведенном определении, и я мог бы присвоить свой idMarker: IdMarker = marker
, а затем добавить свойство id
.
Но я хочу, чтобы id был обязательным.Так что теперь у меня есть это:
const tempMarker: any = new google.maps.Marker(options);
tempMarker.id = markerData.id;
const marker: IdMarker = tempMarker;
marker.id = markerData.id;
И это работает для меня, но мне это не очень нравится.