2017-02-07 2 views
1

저는 TypeScript가 비교적 새로 도입되었습니다. 나는 공통의 기능과 상태를 공유하는 두 개의 라우트 가드를 구현할 필요가있다.Angular2 TypeScript 클래스의 압축

생성자를 사용하여 주입 가능 클래스를 확장하려고하면 결과 클래스가 개인 멤버의 인스턴스를받지 못합니다.

인위적인 예 :

// guard-base.ts 

@Injectable() 
export abstract class GuardBase { 
    constructor(
    private sharedState: SharedState, 
) {} 

    sharedMethod(): boolean {. . .} 
} 


// authentication-required.guard.ts 

@Injectable() 
export class RouteGuard extends GuardBase implements CanActivate { 
    canActivate(): Promise<boolean> { 
    console.log(this); 
    // this.sharedState equals undefined at this point 
    } 
} 

나는 RouteGuard 클래스의 생성자 인수를 제공해야합니까? 내가 뭘하고 싶은 모든 기본 클래스에 가져 오기 및 공유 메서드를 캡슐입니다. 그게 가능하니? 그렇지 않다면 내가하고 싶은 것을 성취하는 가장 좋은 방법은 무엇입니까?

답변

1

새 클래스 (매개 변수가있는)에 대해 새 생성자를 제공 한 다음 부모 매개 변수의 생성자에 매개 변수를 전달하여 사용자가 요청한 것을 수행 할 것을 기대합니다. http://www.c-sharpcorner.com/UploadFile/5089e0/how-to-use-super-keyword-in-typescript/

sharedState 매개 변수를 부모의 생성자로 전달하려면 super(sharedState)을 사용하십시오.

부모 클래스의 멤버 변수에 액세스하려면 private 대신 protected을 사용하십시오.

+0

Gotcha. 흠. 나는 좀 더 우아한 뭔가를 원했다. 비 추상적 클래스를 확장 할 때 동일한 문제가 발생합니까? – Brandon

+0

@ Brandon- 예, 이것은 모든 클래스, 추상 또는 콘크리트에서 동일합니다. – ps2goat

+0

도움 주셔서 감사합니다. 필자가 사용했던 Python만큼 건조한 것은 아니지만 작동 할 것입니다. :) – Brandon

관련 문제