작성
·
244
·
수정됨
0
상속받은 Class에서 부모 메소드 Override 조건이
// 1) 부모 메서드와 반환 타입이 일치해야한다.
// 2) 부모 메서드에 필수인 파라미터들이 존재해야한다.
// 3) 부모 메서드에서 optional인 파라미터들이 자식에서
// 필수로 지정되면 안된다.
라고 강의에서 이야기 하셨는데,
3)의 경우 잘못된게 아닌가 싶어서 문의드립니다.
class Parent {
shout(name: string, age?: number) {
return `${name}야 안녕!`;
}
}
class Child extends Parent {
shout(name: string, age: number): string {
return super.shout(name);
}
}
위 링크와 같이 부모 클래스에 존재하는 optional 파라미터가 자식 클래스에서 필수로 지정되어도 오류가 발생하지 않는 것 같습니다.
제가 확인하고 정리한 요건은 다음과 같습니다.
부모 메소드와 자식 메소드의 반환 타입이 일치해야 함
부모 메소드에서 필수인 파라미터들은 자식 메소드에도 동일한 타입으로 필수 파라미터로 존재해야 함
부모 메소드에 존재하지 않는 필수인 파라미터가 자식 메소드에 존재하지 않아야 함
부모 메소드에 존재하는 optional 파라미터는 자식 메소드에 존재하지 않아도 됨(단, 존재할 경우 타입은 일치해야함)
자식 메소드에 optional 파라미터는 추가적으로 존재해도 됨
혹시 제가 잘못 생각한 부분인지 확인 부탁드립니다.
감사합니다.
답변 3
0
안녕하세요, 코드팩토리님!
이 부분은 어떻게 정리가 됐나요?
Intuitioner님의 의견으로 강의 내용이 수정되어야 하는게 맞나요?
컨펌(?)을 분명히 어딘가에 주셨을 것 같은데 제가 찾지 못하고 있는 것 같아서 여기에 문의드립니다!
0
오버라이드 할 때 부모 메서드의 옵셔널 파라미터를 부모 메서드와 다른 타입으로 지정해보았더니 에러메시지에 undefined와 유니언 되어있는 걸로 나오네요.
아마 부모 메서드의 옵셔널 파라미터가 자식에서 필수 파라미터로 되는 이유가 아마 undefined와의 유니언 타입에서 내로잉 된 타입이기에 가능한 것이 아닐까 해요.
저도 이부분 강의 듣고 정리하면서 정말 안되나 테스트해봤더니 되가지고 의문이 들어 확인해봤네요..
강의 영상에 수정이 필요할 듯 합니다 😅
0
안녕하세요!
제가 테스트 해봤는데 현재 말씀하신 부분이 맞는걸로 확인됩니다.
다만 제가 분명 공식 다큐멘테이션에서 확인하고 테스트 한 후에 작성했던 커리큘럼이라 조금 이상하네요.
현재 레퍼런스를 못찾고 있는데 확인 후 다시한번 컨펌 드리도록 하겠습니다.
감사합니다!
안녕하세요!
Intuitioner님과 basestar011님의 말씀이 맞는걸로 확인됩니다!
혼선을드려 죄송합니다!