[javascript] TypeScript에서 중첩 클래스를 만들 수 있습니까?

TypeScript에서 클래스를 중첩하는 방법이 있습니까? 예를 들어 다음과 같이 사용하고 싶습니다.

var foo = new Foo();
var bar = new Foo.Bar();



답변

TypeScript 1.6부터 클래스 표현식이 있습니다 ( 참조 ).

즉, 다음을 수행 할 수 있습니다.

class Foo {
    static Bar = class {

    }
}

// works!
var foo = new Foo();
var bar = new Foo.Bar();


답변

다음은 클래스 표현식을 사용하는 더 복잡한 사용 사례 입니다.

내부 클래스외부 클래스private멤버에 액세스 할 수 있습니다 .

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());

코드 펜


답변

컴파일 오류가 발생하지 않고 내 보낸 클래스와 함께 작동하도록 할 수 없었고 대신 네임 스페이스를 사용했습니다 .

namespace MyNamespace {
    export class Foo { }
}

namespace MyNamespace.Foo {
    export class Bar { }
}


답변

유형 선언 파일의 컨텍스트에있는 경우 클래스와 네임 스페이스를 혼합하여이를 수행 할 수 있습니다.

// foo.d.ts
declare class Foo {
  constructor();
  fooMethod(): any;
}

declare namespace Foo {
  class Bar {
    constructor();
    barMethod(): any;
  }
}

// ...elsewhere
const foo = new Foo();
const bar = new Foo.Bar();


답변