使用带有TypeScript + requirejs的库扩展

时间:2015-05-31 17:16:47

标签: three.js requirejs typescript

我目前正在使用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文件吗? (我希望不是!)

谢谢!

1 个答案:

答案 0 :(得分:2)

  

如何为已有TS和requirejs的库正确包含“扩展”库?

由于您在此处致电THREE.new THREE.OrbitControls。您需要将import OrbitControls = require("three-orbitcontrols");放在THREE上:

import OrbitControls = require("three-orbitcontrols");
THREE.OrbitControls = OrbitControls;

注意:没有惯用的方法,因为没有JavaScript库执行此操作的惯用方法。这里的解决方案是特定到您的用例和此扩展名。