Три js angular: Свойство dispose не существует для типа Material | Материал [] '

У меня угловая 6.0.5 работает трёх.

Все работало с тремя версиями 0.89.0 и @ types / тремя версиями 0.84.3.

Я обновился до трех версий 0.93.0 и @ types / трех версий 0.92.5

и теперь все сломано. Я получаю следующие ошибки:

Property 'dispose' does not exist on type 'Material | Material[]'.

Property 'dispose' does not exist on type 'Material[]'.

а также

Property 'clippingPlanes' does not exist on type 'Material | 
Material[]'.
Property 'clippingPlanes' does not exist on type 'Material[]'.

а также

Property 'clippingPlanes' does not exist on type 'Material | 
Material[]'.

Property 'clippingPlanes' does not exist on type 'Material[]'.

а также

Argument of type '{ shading: Shading; side: Side; shininess: number; 
color: number; transparent: true; opacity: num...' is not assignable 
to parameter of type 'MeshPhongMaterialParameters'.

Object literal may only specify known properties, and 'shading' does 
not exist in type 'MeshPhongMaterialParameters'.

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

Вы используете мульти-материал? Если это так, вы должны выполнять dispose для каждого материала в массиве, а не для самого массива.

TheJim01 14.06.2018 18:54

Я призываю избавляться от каждого материала. Проблема не в этом, это больше похоже на несовместимость между последней версией npm three и последней версией npm @ types / three. Мне нужно знать последние совместимые версии npm three и @ types / three.

Dino 15.06.2018 11:05
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
3
2
770
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я тоже столкнулся с этой проблемой. Это потому, что нет Multimaterial, вы должны использовать массив материалов. Если вы посмотрите на подпись «материала» в Mesh, то теперь это: Материал | Материал [] поэтому вы не можете напрямую получить к нему доступ как к материалу. То, что я сделал, и при условии, что вы никогда не используете массив материалов, приводится к приведению, например:

mesh1.material.dispose();  //error since material could be an array
(<any>mesh1.material).dispose();     //OK since it doesn't know what it is

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

Другая ваша проблема в том, что «затенение» изменилось на логическое «flatShading».

Другие вопросы по теме