我正在用TypeScript编写VS代码扩展,并且试图导出一个类以在其他TS文件中使用。我已经能够很好地导出函数和接口,但是当我尝试将一个类导出到另一个TS文件时,它因错误而中断:
Here is the error stack: TypeError: extension_1.Foo is not a constructor
在Foo
中类是extension.js
的地方。
值得注意的是,所有这些都可以很好地编译,但是在运行时我会收到此错误。
我的课很简单:
export class Foo {
constructor() {}
public getValues(keys: string[] | undefined): string[] { return []; }
}
我通常会导入它:
import { Foo } from "../extension";
并实例化为
let foo = new Foo();
我的tsconfig.json
看起来像
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"outDir": "out",
"sourceMap": true,
"strict": true,
"rootDir": "src",
},
"exclude": [
"node_modules",
".vscode-test"
]
}
我正在使用带ts-loader的webpack以及devDependencies:
"devDependencies": {
"@types/node": "^10.12.18",
"@types/vscode": "^1.32.0",
"ts-loader": "^6.0.4",
"tslint": "^5.16.0",
"typescript": "^3.5.1",
"webpack": "^4.35.2",
"webpack-cli": "^3.3.5",
"vscode": "^1.1.34"
}
我对所发生的事情感到困惑!
答案 0 :(得分:1)
我看来我的问题是我有循环依赖!
shared-data.ts
的简化版本如下:
import { SHARED_DATA_1 } from './shared-data-1.ts'
export class Foo {
constructor(..) { };
getValues(): string[] { ... };
}
export const SHARED_OBJ = {
key0: {
data1: 'hello world',
data2: new Foo(..)
},
key1: SHARED_DATA_1,
key2: SHARED_DATA_2
}
shared-data-1.ts
如下:
import { Foo } from './shared-data.ts'
export const SHARED_DATA_1 = {
data-1: new Foo()
}
一旦我将Foo移到其自己的文件./Foo.ts
中,并将shared-data.ts
和shared-data-1.ts
都更新为import { Foo } from './Foo.ts'
,一切都将正常进行。
我的实际依赖关系链要复杂一些,但这只是一个简化,解释了问题的症结所在。