我正在编写一个库的类型,我想知道如何导出一个接口,以便可以这样导入和使用它:
import * as S from './sanctuary/index';
const myS: Sanctuary = S.create(); // create new instance with different settings
myS.add(1, 2);
S.add(1, 2); // also be able to use the default instance
最小例子:
// Should be somehow reachable
interface Maybe<A>{
of: <B>(value: B) => Maybe<B>;
}
// Should be able to import as *
interface Sanctuary {
//# create :: { checkTypes :: Boolean, env :: Array Type } -> Module
create(properties: {checkTypes: boolean, env: SanctuaryType[]}): Sanctuary;
add(first: number, second: number): number;
}
请注意create
的返回类型。起初我用命名空间编写它但我无法弄清楚如何返回命名空间的“类型”。
export as namespace S;
export function create(properties: {checkTypes: boolean,
env: SanctuaryType[]}): S; // <- does not compile
如何修改/重写它以便可以像开头一样导入它?
Edit1:我还需要导出其他接口。 (编辑的例子)
我在export = <Santcuary>{};
然后import S = require('./sanctuary/index');
取得了一些成功(这不太理想,但我认为可以使用)。但我不知道如何导出所有其他接口,因为当使用export =
TS时将不允许它。它甚至可以做到吗?