我正在调用一个看起来显然是函数的函数,但我一直得到TypeError:[函数名]不是函数。
以下是重现错误的最小示例。
main.ts
import someFunction from './someFunction'
export const baseUrl = document.location.protocol + '//' + document.location.hostname
someFunction(); //causing TypeError: someFunction is not a function
someFunction.ts
import {Foo} from './Foo'
export default function someFunction(): void {
//some code here
let foo = new Foo();
//some other code here
}
Foo.ts
import {baseUrl} from './main'
export class Foo{
constructor()
private someRandomPrivateFunction(): void {
//some code
let url = baseUrl + "other/stuff"; //removing this line fixes the TypeError
//some other code
}
}
有关正在使用的背景项目的一些细节。
Typescript是针对ES5的1.8,并使用AMD生成模块。
RequireJS是2.2.0,data-main指向main
我在Chrome 52.0.2743.116 m测试
答案 0 :(得分:1)
这花了我太长时间才弄明白,但最终还是归结为循环参考。
在Foo.ts
中,如果删除了对baseUrl
的引用,那么其他一切正常,因为baseUrl
是来自main.ts
要解决此问题,只需将baseUrl
移至其他文件baseUrl.ts
从这次经历中吸取了一些痛苦的教训:
main.ts
......应该是显而易见的。