我目前正在使用THREE.js和socket.io来制作一个小游戏 - 我想使用OrbitControls扩展程序来进行THREE.js(我之前使用过它)用于相机控制的非TS项目。
问题是客户似乎无法找到它(编译得很好):
Uncaught TypeError: undefined is not a function
在线:
this.cameraControls = new THREE.OrbitControls(this.camera, this.renderer.domElement);
我使用以下方式在我的TS文件中包含:
///<reference path="../typings/threejs/three-orbitcontrols.d.ts"/>
import OrbitControls = require("three-orbitcontrols");
在我的三个orbitcontrols.d.ts文件的底部,我有一些输入,我似乎需要在一些打字文件的底部:
declare module 'three-orbitcontrols' {
export=THREE.OrbitControls;
}
但是我不确定这是否是正确的格式,我已经尝试了一些方法,例如将requirejs指向配置中的正确文件(因为文件名有点不同):
paths: {
"three-orbitcontrols": "three.orbitcontrols"
}
有趣的是,在使用Gulp(使用AMD)进行编译后,三轨道控件不会出现在生成的.js文件顶部的require中。
我的问题是:你如何正确地加入&#39;扩展&#39;你已经拥有TS和requirejs的图书馆的图书馆?我需要做某种形式的合并吗?我需要手动合并d.ts和js文件吗? (我希望不是!)
谢谢!
答案 0 :(得分:2)
如何为已有TS和requirejs的库正确包含“扩展”库?
由于您在此处致电THREE.
:new THREE.OrbitControls
。您需要将import OrbitControls = require("three-orbitcontrols");
放在THREE
上:
import OrbitControls = require("three-orbitcontrols");
THREE.OrbitControls = OrbitControls;
注意:没有惯用的方法,因为没有JavaScript库执行此操作的惯用方法。这里的解决方案是特定到您的用例和此扩展名。