当我从导出文件的文件中导入内容时,我遇到了 Typescript 的奇怪问题。有时我会导出一个函数,然后将其导入另一个文件,然后我使用该函数,它不再是一个函数。当我在同一个文件中定义函数时,突然函数是函数?!?!?
为什么一个函数在导出时会不再是一个函数?我在课堂上也遇到过类似的问题。
这个问题的难点在于我无法重新创建一个简单的示例,因为它仅在我使用某种更高级别的包时才会发生。
例如,我在这里遇到了与 sequelize-typescript 类似的问题:my github issue with typescript-sequelize
下面是一些代码,展示了我在使用 InversifyJS 的装饰器之一时遇到的基本问题。
容器.ts
import {fluentProvide} from "inversify-binding-decorators";
export const provideSingleton = (identifier: any) => {
return fluentProvide(identifier)
.inSingletonScope()
.done(true);
};
测试服务.ts
import {provideSingleton} from './container'
@provideSingleton(TYPES.TEST)
export default class TestService {}
最奇怪的是,当我将 与provideSingleton
放在同一个文件中时TestService
,一切正常!?!?!
基本上要重新创建问题,只需按照此处的示例进行操作:inversify-binding-decorators - Using @provideFluent multiple times。但是这个例子有一个问题,所以请看这个问题:fluentProvide example required。以上provideSingleton
反映了该问题的变化。然后您只需从另一个文件中导入该provideSingleton
函数,而不是像示例中那样定义它。
谁能向我解释我错过了什么?为什么哦,为什么某些出口项目不会被视为它们的类型?有没有我没有看到 NodeJS 采取的步骤来使项目实际导出并因此有所不同?我可以强制函数解析为函数,以便可以这样使用吗?
环境:
NodeJS:10.9.0
打字稿:3.0.1
Mac:10.13.16