gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:50:46 25 4
gpt4 key购买 nike

我想创建一个仅以 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 文档的解决方案,该文档明确说明了我在上面解释的有关 Window 层次结构、具有 Foo 类等的内容。

如何表示这个结构?

最佳答案

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

interface FooObject {
foo: Foo;
}

interface Window extends FooObject { }

interface Foo {
search: Search;
Filter: new () => Filter;
}

interface Filter {
}

interface Search {
performSearch(filter: Filter): void;
}

declare const foo: Foo;

关于javascript - 在 typescript 类型定义中表示内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45082505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com