typescript - 在 Typescript 中引用父类中的嵌套类

标签 typescript class static nested

我尝试创建一个嵌套类主要是因为嵌套类只需要在父级内部使用。我已经尝试过以下...

class Foo {
  static Bar = class {}

  myBar: Foo.Bar // This gives "'Foo' refers to a type but is being used as a namespace here"
}

const bar = new Foo.Bar() // This is OK

...但正如评论所说,当用作父级内部的类型时,这不起作用。有没有正确的方法来引用我所缺少的?

我正在使用 Typescript 4.1.3

最佳答案

请耐心听我说,因为这个类型比您想象的要复杂。

名称 Foo 指的是类变量本身,也指 Foo 类的实例的类型。调用 new Foo.Bar() 没问题,因为您访问 变量 Foo 上的 .Bar。您无法访问 type Foo 上的 .Bar,因为这不是您访问 typescript 中的属性的方式。点表示法仅用于命名空间,这就是为什么您会收到错误“'Foo'引用一个类型,但在此处被用作命名空间”。

访问属性的语法是Foo['Bar']。但这也不起作用,因为类型 Foo 引用类的实例,而不是类本身。 Bar 是一个静态 属性,因此它不存在于实例中。如explained here ,我们需要使用 typeof Foo 来获取类构造函数 Foo 的类型。

现在我们尝试 (typeof Foo)['Bar'] ,我们已经差不多完成了,只不过这会返回 类构造函数的类型Bar,我们(大概)想要一个实例的类型。最后我们得到了这样的类型:

InstanceType<(typeof Foo)['Bar']>

Typescript Playground Link

关于typescript - 在 Typescript 中引用父类中的嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65946474/

相关文章:

javascript - 如何防止退格键出现多余的 "r"字母

java - 如何正确调用方法

c++ - 类的静态计数器值无法初始化数组

java - PowerMock的mockStatic()覆盖X.class.y()方法

Javascript - 等待在错误的时间触发

typescript :如何为 npm 模块使用本地类型声明文件

javascript - Visual Studio 监听器中的 Typescript

c# - 使用 ModuleBuilder 将类标记为 `internal static`

python - 在 Python 类中继承 Cython 类

java - 在构造函数中,为什么在执行父类(super class)构造函数之前不能引用当前类的字段?