我将 typescript 声明添加到我的 JavaScript 配置加载器环境中。
该库导出了一个名为 milieu 的函数,该函数在类型 Config 上是通用的。该函数返回一个 Milieu 的实例,它是 Config 和 MilieuConstructor 的合并类型(这是因为在 JS 实现中 Milieu 类构造器将每个配置值复制到实例中)。
使用导出函数时,所有这些都可以正常工作,但是我们遇到了问题。milieu 函数还有一个属性 Milieu,它的值是 Milieu 构造函数。我无法弄清楚如何在不与环境命名空间发生冲突的情况下将此构造函数添加到导出的函数中。
declare namespace milieu {
export interface Opts {
argv?: string
env?: { [s: string]: string }
platform?: string
cwd?: string
unsetEnvValues?: boolean
parseValues?: boolean
}
export class MilieuConstructor<Config> {
constructor (applicationName: string, defaults: Config, opts?: Opts)
}
export type Milieu<Config> = Config & MilieuConstructor<Config>
}
declare function milieu<Config>(applicationName: string, defaults: Config, opts?: milieu.Opts): milieu.Milieu<Config>
export = milieu
我希望以下代码使用我的输入有效:
import milieu from 'milieu'
interface MyConfig {
port: number
}
// This one currently works
const config1 = milieu<MyConfig>('myApplication', {
port: 8000
});
// This one does not as milieu.Milieu does not exist as a value
const config2 = new milieu.Milieu<MyConfig>('myApplication', {
port: 8000
});
这是一个游乐场示例