原文: https://blog.oio.de/2014/03/21/inner-classes-typescript/
b.ts
class Foo { sex:string; say(){ new Foo.InnerFoo('aaa').doIt(); } } module Foo { export class InnerFoo { constructor(name:string){ console.log(name); } doIt() { console.log('inner class do it.'); } } } let a = new Foo.InnerFoo('fly'); let b = new Foo(); b.say();
-----------------------------------------------------------------
In TypeScript, there is no exlicit concept like inner classes.
So what you cannot do in TypeScript is as follows:
1
2
3
4
5
6
|
class Foo { export class InnerFoo { } } new Foo.InnerFoo(); |
You can achieve something similar by merging a class with a module containing the inner class.
1
2
3
4
5
6
7
8
9
10
|
class Foo { } module Foo { export class InnerFoo { doIt(){} } } new Foo.InnerFoo(); |
The merging happens implicitely by using the same name for the class and the module.
Of course you can use the inner class in the outer class:
1
2
3
4
5
6
7
8
9
10
11
|
class Foo { doSomethingWithInnerFoo() { new Foo.InnerFoo().doIt(); } } module Foo { export class InnerFoo { doIt(){} } } new Foo().doSomethingWithInnerFoo(); |
The only downside here is that the inner class must be exported, so it is always visible to the outside – there are no private inner classes.