我尝试创建一个嵌套类主要是因为嵌套类只需要在父级内部使用。我已经尝试过以下...
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 - 在 Typescript 中引用父类中的嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65946474/