You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Three Fiber+TypeScript报错:Object3D不存在指定属性

React Three Fiber + TypeScript 属性类型错误解决方案

我用React Three Fiber结合TypeScript开发React应用,编写了如下代码:

return (
    <group ref={group} dispose={null}>
      <scene name="Scene" {...props}>
        <mesh
          ref={mesh}
          scale={1.5}
          name="Object_0"
          morphTargetDictionary={nodes.Object_0.morphTargetDictionary}
          morphTargetInfluences={nodes.Object_0.morphTargetInfluences}
          rotation={[Math.PI / 2, 0, 0]}
          geometry={nodes.Object_0.geometry}
          material={materials.Material_0_COLOR_0}
        />
      </scene>
    </group>
  );

但始终遇到错误:Property: 'morphTargetDictionary' does not exist on type 'Object3D<Event>',morphTargetInfluences和geometry属性也出现同类错误。我尝试通过以下代码扩展@types/three中的Object3D接口添加这些属性,但没有效果:

declare module '@types/three' {
  export default interface Object3D {
    morphTargetDictionary: number;
    morphTargetInfluences: number
    geometry: string
  }
}

问题根源

错误扩展了Object3D接口,但nodes.Object_0实际对应<mesh>组件,属于Mesh类型,morphTargetDictionary、morphTargetInfluences、geometry都是Mesh的属性,且你定义的类型也不符合Three.js实际规范(比如morphTargetDictionary是Record<string, number>而非number)。

正确解决方案

1. 全局扩展Mesh类型(推荐)

在项目的全局类型文件中(比如src/global.d.ts),扩展Three.js的Mesh接口,使用正确的类型定义:

declare module 'three' {
  interface Mesh {
    morphTargetDictionary?: Record<string, number>;
    morphTargetInfluences?: number[];
    geometry?: THREE.BufferGeometry;
  }
}

注意:不要使用export default interface,直接在three模块下扩展Mesh接口即可。

2. 局部类型断言(快速临时解决)

如果不想全局修改类型,可以在使用时直接将nodes.Object_0断言为Mesh类型:

<mesh
  ref={mesh}
  scale={1.5}
  name="Object_0"
  morphTargetDictionary={(nodes.Object_0 as THREE.Mesh).morphTargetDictionary}
  morphTargetInfluences={(nodes.Object_0 as THREE.Mesh).morphTargetInfluences}
  rotation={[Math.PI / 2, 0, 0]}
  geometry={(nodes.Object_0 as THREE.Mesh).geometry}
  material={materials.Material_0_COLOR_0}
/>

3. 检查模型生成工具的类型文件

如果是用gltfjsx或@react-three/drei生成的模型代码,这类工具通常会自动生成对应的.d.ts类型文件,确保你已经正确引入该文件,避免手动扩展类型。

内容的提问来源于stack exchange,提问作者jgcarrillo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:10:32