以前,我喜欢使用TS名称空间和声明合并来创建FP样式的模块,而不需要MyModule.T
约定:
export type Foobar = { }
export namespace Foobar {
export function doStuff(foobar: Foobar) { }
}
import { Foobar } from './Foobar'
Foobar.doStuff(fb)
名称空间不再是真正的方法,Babel不支持它们,它们可能不支持树摇动等等。但是我希望export * as ns
语法可以〉用作替代,如下所示:
export type Foobar = import('./Foobar').Foobar
// Or:
// export type { Foobar } from './Foobar'
export * as Foobar from './Foobar'
这似乎通过了夜间编译器,但编译器只知道Foobar是作为一个类型而不是值重新导出的。如果编译器能像命名空间那样将它们合并成一个组合的值和类型,那就太好了。
- 最初由@katis发布于#4813(评论)*
2条答案
按热度按时间qxgroojn1#
我们有一些项目/模块大量使用了这种模式。尽管我们需要改变,但墙上的文字已经写好了:
我想我对这个问题没有太多要补充的,它描述得很好,我们的用例也很相似。我只是希望我能+1000它:)
k97glaaz2#
我的情况也一样:
里答:
仅选项:
RequestContext
和ResponsePayload
,没有任何类型,但它在运行时工作。types/index.js
为: