为什么我的函数导致 TypeError <function> 不是函数?
Why is my function causing a TypeError <function> is not a function?
我调用的函数显然是一个函数,但我一直收到 TypeError: [function name] is not a function。
这是重现错误的最小示例。
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
中进行测试
我花了很长时间才弄明白,但最终归结为循环引用。
在 Foo.ts
中,如果删除对 baseUrl
的引用,那么其他一切都可以正常工作,因为 baseUrl
是来自 main.ts
的依赖项
要解决此问题,baseUrl
只需移动到另一个文件 baseUrl.ts
这次经历的一些惨痛教训:
- 没有什么应该依赖于
main.ts
...那应该是显而易见的。
- 循环引用产生的错误消息可能非常模糊,完全不相关,并且与实际问题相差好几层,所以不要依赖错误消息来避免循环依赖。
我调用的函数显然是一个函数,但我一直收到 TypeError: [function name] is not a function。
这是重现错误的最小示例。
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
中进行测试我花了很长时间才弄明白,但最终归结为循环引用。
在 Foo.ts
中,如果删除对 baseUrl
的引用,那么其他一切都可以正常工作,因为 baseUrl
是来自 main.ts
要解决此问题,baseUrl
只需移动到另一个文件 baseUrl.ts
这次经历的一些惨痛教训:
- 没有什么应该依赖于
main.ts
...那应该是显而易见的。 - 循环引用产生的错误消息可能非常模糊,完全不相关,并且与实际问题相差好几层,所以不要依赖错误消息来避免循环依赖。