原文: 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.