【发布时间】:2020-11-05 04:08:03
【问题描述】:
我在实例化时尝试设置 MeshBasicMaterial 实例的 userData 属性时遇到 TypeScript 错误。
例如:
import * as THREE from 'three';
...
const customUserData = {
...
};
const myMaterial = new THREE.MeshBasicMaterial({
color: 0xf7f7f7,
transparent: true,
opacity: 1,
side: THREE.BackSide,
userData: myCustomUserData
});
这会返回以下错误:
Argument of type '{ color: number; transparent: true; opacity: number; side: THREE.Side; userData: null; }' is not assignable to parameter of type 'MeshBasicMaterialParameters'.
Object literal may only specify known properties, and 'userData' does not exist in type 'MeshBasicMaterialParameters'. TS2345
但是,当我调查MeshBasicMaterial 的类型定义时,它扩展了Material:
export class MeshBasicMaterial extends Material { ... }
Material 类又指定了一个userData 属性:
export class Material extends EventDispatcher {
// ...
userData: any;
// ...
}
但是,在类实例化之外指定 userData 属性是可行的:
let myMaterial = new THREE.MeshBasicMaterial({...});
myMaterial.userData = myCustomUserData;
MeshBasicMaterial 不应该从Material 继承userData 属性,还是我错过了一些明显的东西? (这可能与MeshBasicMaterialParameters 类型有关,但不清楚为什么使用此类型或阻止从Material 继承属性。)
【问题讨论】:
-
myCustomUserData 的值是多少?
-
这只是一些对我有用的键值对,但要回答你的问题,我在这里输入的任何内容都会失败:错误似乎来自在实例化时在材料属性中指定
userData.
标签: typescript three.js