【发布时间】:2018-09-19 08:59:02
【问题描述】:
感谢这个问题已被问过几次,但我遇到的几乎所有案例都是有人试图扩展非本地类的案例。我的情况不同。我有一个非常简单的基类CObject,如下所示:
export class CObject extends BaseObject {
constructor() {
super();
}
static url(path: string): string { return ""; }
static wssUrl(): string { return ""; }
static callMethod(method, path: string, params: any, noConvertData?: boolean): Promise<any> { return null; }
static post(path: string, params: any, noConvertData?: boolean): Promise<any> {
return CObject.callMethod('post', path, params, noConvertData);
}
static put(path: string, params: any, noConvertData?: boolean): Promise<any> {
return CObject.callMethod('put', path, params, noConvertData);
}
static patch(path: string, params: any, noConvertData?: boolean): Promise<any> {
return CObject.callMethod('patch', path, params, noConvertData);
}
static get(path: string, params: any, noConvertData?: boolean): Promise<any> {
return CObject.callMethod('get', path, params, noConvertData);
}
static delete(path: string, params: any, noConvertData?: boolean): Promise<any> {
return CObject.callMethod('delete', path, params, noConvertData);
}
}
包括 BaseObject 在内的整个类层次结构只是简单的 Typescript 类。但是,当我从 CObject 扩展一个类然后尝试实例化它时,我得到了这个可怕的错误(现在 4 天!)。有趣的是,我可以自己实例化CObject 而不会出现任何问题。只是派生类会出现问题,甚至是像这样的空类:
export class TestClass extends CObject {
constructor() {
super();
}
}
需要注意的是,此代码在我的服务器 (Node.js) 和客户端之间共享。该代码在服务器端运行良好。没有任何问题。
我试过查看 babel 生成的代码,它只是简单的 ES6 类。所有其他 TS 生成的类都可以正常工作,CObject 下的所有内容在调用 CObject 构造函数时都会失败。
我的 .babelrc 如下:
{
"presets": [
"es2015-node5",
"react",
"stage-0",
"stage-1",
"bluebird"
],
"plugins": [
"transform-decorators-legacy",
"react-hot-loader/babel",
"transform-async-to-bluebird",
"transform-promise-to-bluebird",
"transform-runtime",
[
"module-alias",
[
{ "src": "./build/Server", "expose": "Server" },
{ "src": "./build/Shared", "expose": "Shared" },
{ "src": "./build/Client", "expose": "Client" }
]
]
],
"compact": "false"
}`
对于客户端编译,我在 tsconfig.json 中的 awesome-typescript-loader 配置如下:
编辑:我查看了错误的 ATL 配置。完整配置如下:
"awesomeTypescriptLoaderOptions": {
"babelrc": true,
"useBabel": true,
"useWebpackText": true,
"useTranspileModule": true,
"doTypeCheck": true,
"forkChecker": true,
"presets": ["env", { "targets": "last 2 versions, ie 11", "modules": false }, { "exclude": ["transform-es2015-classes"] } ],
"babelOptions": {
"sourceMaps": true
},
"useCache": true
}
客户端 webpack 配置如下:
var path = require('path');
var webpack = require('webpack');
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');
let outputDir = path.join(__dirname, "..", "dist", "Client");
console.log(`Output: ${outputDir}`);
module.exports = {
entry: "./src/Client/Browser/Src/Main.tsx",
output: {
filename: "client.js",
path: outputDir
},
target: 'web',
// Enable sourcemaps for debugging webpack's output.
devtool: "source-map",
resolve: {
// Add '.ts' and '.tsx' as resolvable extensions.
extensions: [".ts", ".tsx", ".js", ".json"],
plugins: [new TsconfigPathsPlugin({ configFile: "./tsconfig.json" })],
modules: [
"./node_modules",
"./src/Shared",
"./src/Client"
]
},
module: {
rules: [
// All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
{ test: /\.tsx?$/, loader: "awesome-typescript-loader" },
// All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
]
}
};
任何帮助将不胜感激。谢谢你。
编辑:确切的错误是:
ConfigSection.ts?26cc:18 Uncaught TypeError: Class constructor CObject cannot be invoked without 'new'
at new ConfigSection (ConfigSection.ts?26cc:18)
at Object../src/Shared/Model/Config/ShAlpha.ts (ShAlpha.ts:338)
at __webpack_require__ (bootstrap:19)
【问题讨论】:
-
BaseObject来自哪里,看起来如何? -
BaseObject是我自己的班级,现在几乎完全是空的。如果有问题,我不会收到关于BaseObject构造函数的错误吗?另外,如果有任何不符合的代码,为什么节点可以正常工作? -
你到底遇到了什么错误?
-
已添加到原始帖子中,但这里是给你的:
ConfigSection.ts?26cc:18 Uncaught TypeError: Class constructor CObject cannot be invoked without 'new' at new ConfigSection (ConfigSection.ts?26cc:18) at Object../src/Shared/Model/Config/ShAlpha.ts (ShAlpha.ts:338) at __webpack_require__ (bootstrap:19) -
我曾经遇到过这个错误。就我而言,我有一个自己制作的库,在我的应用程序中,我从库中的一个类派生了一个类。我的问题是我的应用程序以 ES5 为目标,而我使用的是 ES6 版本的库。您能否检查在转译的 JavaScript 代码中,您的派生类是否在 ES5 中,但
CObject被定义为 ES6 类?
标签: javascript node.js typescript