【问题标题】:Using library extensions with TypeScript + requirejs通过 TypeScript + requirejs 使用库扩展
【发布时间】:2015-08-14 03:08:13
【问题描述】:

我目前正在使用 THREE.js 和 socket.io 来制作一个小游戏 - 我想为 THREE.js 使用 OrbitControls 扩展(我以前在非 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");

在我的三轨道控制.d.ts 文件的底部,我在一些打字文件的底部有我似乎需要的常用导出:

declare module 'three-orbitcontrols' {
    export=THREE.OrbitControls;
}

但我不确定这是否是正确的格式,我尝试了一些方法,例如将 requirejs 指向配置中的正确文件(因为文件名有点不同):

paths: {
    "three-orbitcontrols": "three.orbitcontrols"
}

有趣的是,在使用 Gulp(使用 AMD)编译后,三轨道控件不会出现在生成的 .js 文件顶部的 require 中。

我的问题是:您如何正确地为您已经拥有的 TS 和 requirejs 库包含一个“扩展”库?我需要做某种形式的合并吗?我需要手动合并 d.ts 和 js 文件吗? (希望不会!)

谢谢!

【问题讨论】:

    标签: three.js requirejs typescript


    【解决方案1】:

    您如何正确地为您已经拥有的 TS 和 requirejs 库包含一个“扩展”库?

    既然你在这里打电话给THREE.new THREE.OrbitControls。你需要把import OrbitControls = require("three-orbitcontrols");放在THREE上,所以:

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

    注意:没有一种惯用的方式来做到这一点,因为 JavaScript 库没有一种惯用的方式来做到这一点。此处的解决方案特定于您的用例和此扩展。

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 1970-01-01
      • 2020-06-09
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      相关资源
      最近更新 更多