在 Typescript 中,有没有办法限制/限制导出的函数,使其只能由某些文件导入?

In Typescript is there a way to restrict / limit an exported function so it can only be imported by certain files?

提问人:Tom 提问时间:1/4/2021 更新时间:1/4/2021 访问量:1683

问:

我希望开发人员使用类/接口,而不是直接导入函数。

有没有办法限制,所以只有类可以导入函数?

我不想将所有功能放在一个文件中,因为它在大型项目中不可扩展

即我不想使用这种模式:

// myclass.ts

// no exports on the functions
function foo(){ ... }
function bar(){ ... }

export class MyClass {
 Foo(){ return foo() }
 Bar(){ return bar() }
}

我想要实现的目标:

// foo.ts
export function foo(){ ... } 
// I want this to be private but it needs to be exported so the class below can use it

// bar.ts
export function bar() { ... }

// myclass.ts
import { foo } from 'foo';
import { bar } from 'bar';

export class MyClass {
 Foo(){ return foo() }
 Bar(){ return bar() }
}

// anyotherfile.ts
import { foo } from 'foo' // Stop from importing directly
import { MyClass } from 'myclass' // use this instead
TypeScript 函数 import export private

评论

1赞 yts 1/4/2021
据我所知,一旦它们被导出,它们就会被导出。为什么不把 foo 和 bar 放在myclass.ts而不是不同的文件中呢?
0赞 Tom 1/4/2021
@yts 这就是它目前的结构(这可能是最好的解决方案)。我试图通过将所有内容拆分为单个文件来解决的两个问题:1.文件不会变成数千行的长度。2. 当多个开发人员对单个巨型文件进行更改时,版本冲突更少。
2赞 Alex Wayne 1/4/2021
恕我直言,这是一个约定要解决的问题,而不是类型系统。调用该文件,并将其放在具有该类的目录中。这提供了一个很好的线索,即直接导入该文件从来都不是您想要的,除非您处于一个与实际实现有关的文件中。my-class-foo.tsMyClass

答: 暂无答案