Получая доступ к геометрии через сетку (newMesh.geometry
), вы получаете геометрию, напечатанную как свойство geometry
класса Mesh. Очевидно, свойство поддерживает два разных типа геометрии, поэтому вы получаете объединение: Geometry | BufferGeometry
.
Если вы точно знаете, какой тип геометрии используется, вы можете просто указать тип значения свойства:
const { vertices, faces } = <THREE.Geometry>newMesh.geometry;
Если вы не знаете тип geometry
, вам нужна условная логика, например, используя что-то вроде:
const geometry = newMesh.geometry;
if (geometry instanceof THREE.Geometry)
// geometry will be typed as Geometry here
else
// geometry will be typed as BufferGeometry here
Во втором случае вы используете getObjectByName
, который всегдавозвращает объекты самого базового типа Object3D
. Здесь вы также должны соответственно указать тип результата.
// Assuming the thing named boxMesh is a Mesh...
// The <any> assertion prevents additional type errors.
const mesh = <THREE.Mesh><any>scene.getObjectByName('boxMesh');