2017-05-18 2 views
0

클래스 A 중 인스턴스를 내보내려고합니다. A에는 A.B의 인스턴스를 반환하는 메서드가 있습니다. 인스턴스와 정적 내부 클래스를 어떻게 든 내보낼 수 있습니까?클래스 A의 인스턴스와 중첩 된 클래스 A.B

class A { 
    public static B = class {} 

    getB(): A.B { // <- compile error 
     return new A.B(); // this works fine 
    } 
} 

export default new A(); 
export { A.B } 

자바 배경에서 왔어. 당신이 볼 수있는 것처럼, 나는 전환을하기 위해 여기에서 조금 고심하고있다. 모듈 대신 무언가를해야한다고 생각하니? ...

import a from "./A"; 
import { A.B } from "./A"; 

let b: A.B = a.getB(); 
+0

는 왜 다음 "내부 클래스 '만들기? –

+0

@NitzanTomer 나는 데이터의 구조적 분리를 유지하면서 두 클래스가 실제로 함께 속한다는 것을 암시하고 싶다. –

+1

이 접근법은 단지 당신에게 고통을 가져올 것입니다. Typescript는 이것과 매우 다르므로 같은 방식으로 생각하면 안됩니다 ... 예를 들어, 내부 클래스는 외부 클래스의 멤버에 액세스하지 않습니다. 당신은 그것을 묻어서 아무것도 얻지 못합니다. 또한 클래스가 아닌'A'의 인스턴스 만 내보내는 것이 무엇입니까? 그것은 싱글 톤입니까? –

답변

0

클래스를 중첩는 자바 반사했다,하지만 난 정말 표현하고 싶었던 것은 코드가 모두 관리 A와 B 사이의 밀접한 관계이다.

@NitzanTomer's answer 수정, 여기에 나를 위해 일한 내용은 다음과 같습니다

class A { 
    getB(): B { 
    return new B(); 
    } 
} 

export class B { 
} 

export default new A(); 

그런 다음 사용이 간단하다

import a from './my-library'; 
import {B} from './my-library'; 

let b: B = a.getB(); 
1

당신이 A의 인스턴스를 두 개 이상 필요하지 않은 경우, 어쩌면 클래스 안
이 방법에 대해 : 여기

내가 그것을 사용하고자하는 방법 방법 :

class B { } 

const singleton = { 
    getB(): B { 
     return new B(); 
    } 
}; 

export default singleton; 
+0

자바는 자바처럼 객체가 아니며 클래스가 없어도 메소드와 멤버가있는 객체를 가질 수 있습니다. . 하나의 인스턴스 만 필요하고 상속이 필요 없다면 클래스를 갖는 것이 중복됩니다. 나는 "A와 B를 병합"한다는 것이 무슨 뜻인지 잘 모르겠습니다. 당신의 상황이 무엇인지 더 설명하면, 나는 나의 접근 방식을 명확히 할 수 있거나 적절하지 않다고 동의 할 수 있습니다. –

+0

클래스 B가 내보내기되지 않았으므로이 방법은 작동하지 않습니다. 나는 B 타입의 변수를 선언 할 수 없다. 내보내기 {B}; 기본 싱글 톤 내보내기; –

관련 문제