在typescript类型定义中表示内部类

时间:2017-07-13 13:44:27

标签: javascript typescript typescript-typings

我想创建一个以javascript形式存在的库的类型定义。

相当新的我阅读了文档on the official manual以及所有示例。

但是有一种情况我并不理解:

库为程序员提供了一个全局变量foo,它包含类和对实例的引用,例如,可以使用(在javascript中)触发搜索

var filter = new foo.Filter();
var results = foo.search.performSearch(filter);

同样foo也可以在window对象中使用,因此使用window.foo.[...]会保留相同的结果。

我怎样才能代表这个事实呢? 我最初开始定义以下内容(基本上复制了库API参考中的内容):

interface FooObject {
    foo: Foo;
}

interface Window extends FooObject { }

interface Foo {
    search: Search;
}

interface Search {
    performSearch(): void;
}

declare const foo: Foo;

这样就接受了语法foo.search.performSearch()window.foo.search.performSearch()也是如此。

能够代表第一部分new foo.Filter()的唯一方式(我读到的)将是

declare namespace /*or module*/ foo {
    class Filter {
        // [...]
    }
}

但是名称空间are also declared as values,所以这会覆盖第一个foo定义并且编译器会抱怨。另外,即使它有效,我也不认为new window.foo.filter()会按预期运行,并且肯定会抛出编译器错误。

当然我可以做以下

declare namespace /*(or module)*/ foo {
    const search: Search;

    interface Search {}

    class Filter {}
}

没有声明const foo: Foo或类Foo但我无法在d.ts文件中将模块分配给window.foo,编译器会抱怨。 另外,这不是一个允许我坚持使用库的API Doc的解决方案,该库明确告诉我上面解释的关于Window的层次结构,具有Foo类等的内容。

我如何表示这种结构?

1 个答案:

答案 0 :(得分:1)

您通过构造函数表示一个类。

Foo