如何防止TypeScript将类泄漏到ES5?

uqcuzwp8  于 2023-02-05  发布在  TypeScript
关注(0)|答案(1)|浏览(136)

我有这样的代码:

import { SuperClass } from 'some-library';

export class MyClass extends SuperClass {
  constructor() {
    super();
  }
}

程序失败,并显示如下错误:

var _this = _super.call(this)) || this;
                           ^

TypeError: Class constructor SuperClass cannot be invoked without 'new'

正如here所回答的那样,这个问题是由TypeScript将类转移到ES5而SuperClass是ES6类这一事实引起的。
引用的答案说将TypeScript的“target”选项设置为es6应该可以修复它。但是,如果我这样做,TypeScript仍然输出ES5类。将“target”设置为“es2018”或“2020”也没有帮助。无论我做什么,输出如下所示:

var MyClass = /** @class */ (function (_super) {
    __extends(MyClass, _super);
    function MyClass() {

这是我的tsconfig.json:

{
    "compilerOptions": {
        "target": "ES2018",
        "module": "commonjs",
        "lib": ["es2018"],
        "composite": true
    },
    "include": ["*.ts"]
}

如何让TypeScript输出ES6类?

2hh7jdfx

2hh7jdfx1#

事实证明target=es6 * 确实 * 有效,问题实际上是我运行了tsc myfile.ts而不是tsc(没有参数)。当文件作为参数传递时,则tsc ignores tsconfig.json,这就是为什么我的tsconfig.json中的“target”选项无效的原因。如果我将--target=es6作为CLI参数传递,则TypeScript将我的类正确地转换为ES6类。

相关问题