class classX {
private y: number = 0;
public getY(): number { return this.y; }
public utilities = new class {
constructor(public superThis: classX) {
}
public testSetOuterPrivate(target: number) {
this.superThis.y = target;
}
}(this);
}
const x1: classX = new classX();
alert(x1.getY());
x1.utilities.testSetOuterPrivate(4);
alert(x1.getY());
class Foo {
static Bar = class { }
}
declare namespace Foo {
type Bar = typeof Foo.Bar.prototype
}
let bar: Foo.Bar = new Foo.Bar()
选项二:在命名空间Foo中实现Bar
对于静态类,下面的实现可能对某些人来说更优雅。缺点是这个方法不能处理非静态类。
class Foo { }
namespace Foo {
export class Bar { }
}
let bar: Foo.Bar = new Foo.Bar()
定义Foo.prototype.Bar(非静态)
要创建无缝的非静态嵌套类,可以使用prototype来指示嵌套类不是静态的。
class Foo {
Bar = class { }
}
declare namespace Foo.prototype {
type Bar = typeof Foo.prototype.Bar.prototype
}
let foo: Foo = new Foo()
let bar: Foo.prototype.Bar = new foo.Bar()
6条答案
按热度按时间3mpgtkmj1#
在现代TypeScript中,我们有类表达式,可以用来创建嵌套类。例如,您可以执行以下操作:
slmsl1lt2#
下面是一个使用*类表达式*的更复杂的用例。
允许内部类访问外部类的
private
成员。codepen
neekobn83#
我无法在没有收到编译错误的情况下使用导出的类,而是使用namespaces:
j13ufse24#
如果你在类型声明文件的上下文中,你可以通过混合类和命名空间来做到这一点:
js81xvg65#
定义
Foo.Bar
(静态)定义静态嵌套类
Foo.Bar
可以通过以下两种方式完成。1.选项1:在类
Foo
中定义嵌套类Bar
。该类型在declare namespace
声明中声明。1.选项2:使用声明合并在
Foo
命名空间中使用export
关键字定义嵌套类Bar
。选项一:在类
Foo
中实现Bar
所有类都在一个块中实现,即在
Foo
类声明中。选项二:在命名空间
Foo
中实现Bar
对于静态类,下面的实现可能对某些人来说更优雅。缺点是这个方法不能处理非静态类。
定义
Foo.prototype.Bar
(非静态)要创建无缝的非静态嵌套类,可以使用
prototype
来指示嵌套类不是静态的。new Foo.prototype.Bar()
不起作用,尽管它是有效的Typescript,即使没有类型声明。6qftjkof6#
我希望这能有所帮助
能够:
用例