打字稿删除(摇树)我的文件/类

时间:2019-05-26 21:33:54

标签: typescript tree-shaking

假设一个类将自己添加到另一个类中,如下所示:

bar.ts

import { Foo } from './foo';

export class Bar {}

Foo.prop = Bar;

文件foo.ts

export class Foo {
    public static prop: any;
}

现在,如果要在index.ts中使用它

import { Foo } from './foo';

console.log(Foo.prop); // -> undefined

它是未定义的。似乎根本没有使用bar.ts(可能是摇树)。因此,我可以将其修复如下:

import { Foo } from './foo';
import { Bar } from './bar';

new Bar(); // trick!
console.log(Foo.prop); // -> Bar

因为我显示的解决方案很丑,所以还是有办法告诉打字稿包含Bar

为完整性起见,这是我的tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "sourceMap": true,
    "noImplicitAny": false,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es2017",
    "outDir": "./dist",
    "baseUrl": "./",
    "lib": ["es2017", "dom", "dom.iterable"]
  },
  "exclude": ["node_modules", "**/*.spec.ts", "dist"]
}

1 个答案:

答案 0 :(得分:0)

Foo.prop = Bar;

是导致问题的原因,您正在Bar.ts中执行此操作,在Foo.ts中执行了此操作,现在当您在index.ts中创建Foo的新对象时,摇晃树不会删除Bar.ts

通常,如果需要向类添加依赖项,则始终在定义该类的文件中执行此操作(在这种情况下为Foo.ts)