【发布时间】:2018-02-24 11:58:46
【问题描述】:
为什么我必须将类型定义从material: Material | Material[]; 修改为material: Material; 才能修复下面详述的错误? TypeScript 似乎假设 material 参数的类型为 Material[],即使我明确将其设置为 Material。我错过了什么吗?
Typescript/ThreeJS 错误:
this.obj3D.traverse((child) => {
if (child instanceof THREE.Mesh) {
// Error in line below:
// Property 'shading' does not exist on type 'Material | Material
child.material.shading = THREE.SmoothShading;
child.material.side = THREE.DoubleSide;
child.scale.set(this.scale, this.scale, this.scale);
child.castShadow = this.castShadow;
child.receiveShadow = true;
child.material.needsUpdate = true;
}
});
三JS类型定义:
export class Mesh extends Object3D {
constructor(geometry?: Geometry, material?: Material | Material[]);
constructor(geometry?: BufferGeometry, material?: Material | Material[]);
geometry: Geometry | BufferGeometry;
material: Material | Material[]; // Had to delete *| Material[]* to fix
drawMode: TrianglesDrawModes;
setDrawMode(drawMode: TrianglesDrawModes): void;
updateMorphTargets(): void;
getMorphTargetIndexByName(name: string): number;
raycast(raycaster: Raycaster, intersects: any): void;
}
【问题讨论】:
-
感谢@Rabbid76 指出这一点。我已经更新了问题并用实际代码替换了图片。
标签: typescript three.js