我正在将一些Javascript文件转换为项目中的Typescript文件。目前,我一直在努力转换Range3.js,一个依赖于另一个名为Cartesian3.js的Javascript文件的文件我为Cartesian3.js写了一个定义文件(d.ts),并且项目编译,但在运行时,我得到这个错误:
Uncaught ReferenceError: Cartesian3 is not defined
Cartesian3.js的格式如下:
define([
'./TypescriptFile'
],
function(
TypescriptFile
)
{
/* file has some prototype-extending functions like this */
Cesium.Cartesian3.prototype.extendingFunction = function()
{
/* function defined here */
}
/* and some static functions like this */
Cesium.Cartesian.staticFunction = function()
{
/* function defined here */
}
/* more functions... */
return Cesium.Cartesian3;
});
我为Cartesian3.js写的d.ts文件如下所示:
///<reference path="../../Cesium/Cesium.d.ts"/>
declare class Cartesian3 extends Cesium.Cartesian3 {
extendingFunction(): void;
static staticFunction(): Cartesian3;
/* more functions listed here */
}
Range3.ts(抛出ReferenceError的文件)如下所示:
///<reference path="./Cartesian3.d.ts"/>
/* another import */
class Range3
{
low: Cartesian3;
/* more instance variables */
/* truncated constructor */
constructor(low?: Cartesian3)
{
this.low = Cesium.defined(low) ? <Cartesian3>low.clone() : new Cartesian3; // line that throws an error
}
/* more functions */
}
Range3.js(适用于该项目)如下所示:
define([
'./Cartesian3',
/*another dependency*/
],
function(
Cartesian3,
/*other dependency */
)
{
function Range3(low)
{
this.low = Cesium.defined(low) ? low.clone() : new Cartesian3();
}
/* other functions defined here */
return Range3;
});
我怀疑这是由于定义文件的执行不正确,但我无法查明问题。任何帮助表示赞赏!
答案 0 :(得分:0)
这不是一个完全解决方案,但我找到了解决方法。由于Javascript文件正在扩展Cesium对象的原型(Cartesian3),我将额外的函数添加到Cesium的d.ts文件中,用于Cartesian3,并删除了Cartesian3.d.ts,而不是引用Range3.ts中的Cesium.d.ts,这修复了错误。如果有人想要找到更好的解决方案,我很想知道。