Inner Classes with TypeScript
原文: 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.

浙公网安备 33010602011771号