我目前正在尝试开始将Javascript Webpack项目转换为在Typescript中工作的过程,以便一切都很好地输入。但是,我的配置似乎无法识别我已更改为Typescript的文件。
项目编译,但我在运行时收到此错误:
TypeError: Angle.cyclic3dAxis is not a function
Angle是我在Typescript中重写的(以前的Javascript)文件,由2个小的静态函数组成,格式如下:
export class Angle
{
public static cyclic3dAxis(i: number): number{ /* function defined here */ }
public static anotherFunction(): number{/*defined here*/}
}
原始Javascript文件(我没有写,但有效),我用TS代替了:
define([],function()
{
var Angle = { };
Angle.cyclic3dAxis = function(i) { /* function defined here */ };
Angle.anotherFunction = function() { /* defined here */ };
return Angle;
});
这些函数包含相同的代码。
webpack.config.json的相关部分:
/* some vars declared here truncated for brevity */
module.exports = function(env)
{
/* more stuff here */
resolve : {
alias: {
Cesium: path.resolve(__dirname, "scripts/Cesium/Cesium.js")
},
extensions: [".ts", ".tsx", ".js", ".json"]
},
module: {
rules : [
{
test: /\.js$/,
exclude: /(Cesium|node_modules)/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['es2015'],
}
}
]
},
{
test: /\.tsx?$/,
exclude: /(Cesium|node_modules)/,
use: [
{
loader: 'awesome-typescript-loader'
}
]
},
/* and more */
和我的tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"sourceMap": true
}
}
整个项目非常大,所以如果我设置" allowJs"为true,我得到一个关于Javascript堆内存不足的错误。
角度由项目中的其他Javascript文件引用,如下所示:
define([
'./Angle',
],
function(
Angle
}
{
/* example function call */
functionName = function(i) {
return Angle.cyclic3dAxis(i);
};
});
如果我做错了什么,或者我需要添加的任何内容,请告诉我。感谢您的帮助!
答案 0 :(得分:1)
转换后文件中的导出结构与原始JS文件中的导出不匹配。模块应如下所示:
export function cyclic3dAxis(i: number): number{ /* function defined here */ }
export function anotherFunction(): number{/*defined here*/}
或者,如果您需要使用静态方法的类,则应使用export = Angle;
导出
class Angle
{
public static cyclic3dAxis(i: number): number{ /* function defined here */ }
public static anotherFunction(): number{/*defined here*/}
}
export = Angle;