인프런 커뮤니티 질문&답변

Intuitioner님의 프로필 이미지

작성한 질문수

[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스

Override (오버라이드)

타입스크립트 Class Override 관련 질문

23.07.30 18:17 작성

·

216

·

수정됨

0

상속받은 Class에서 부모 메소드 Override 조건이

// 1) 부모 메서드와 반환 타입이 일치해야한다.

// 2) 부모 메서드에 필수인 파라미터들이 존재해야한다.

// 3) 부모 메서드에서 optional인 파라미터들이 자식에서

// 필수로 지정되면 안된다.

라고 강의에서 이야기 하셨는데,

3)의 경우 잘못된게 아닌가 싶어서 문의드립니다.

https://www.typescriptlang.org/play?#code/MYGwhgzhAEAKYCcCmA7ALtA3gKGn6EAFgPYCuaAFCmALZIBcBaCAligOYA00Y7SA-IxSkaAIyQIAlFlz45yNKQQpoAAwAkmanQC+gH1HogCVHAqo0BCVQG5ZeHdlvZsoSDADChFiAAm0JAA80qJ4w8MjoOHJEZJTaDEysHNy8scJiEpKMEMxs7DJyefgKSioQpAAOEgB0keRUtEiSVnK2OkA

class Parent {
    shout(name: string, age?: number) {
        return `${name}야 안녕!`;
    }
}


class Child extends Parent {
    shout(name: string, age: number): string {
            return super.shout(name);
    }
}

위 링크와 같이 부모 클래스에 존재하는 optional 파라미터가 자식 클래스에서 필수로 지정되어도 오류가 발생하지 않는 것 같습니다.

제가 확인하고 정리한 요건은 다음과 같습니다.

  1. 부모 메소드와 자식 메소드의 반환 타입이 일치해야 함

  2. 부모 메소드에서 필수인 파라미터들은 자식 메소드에도 동일한 타입으로 필수 파라미터로 존재해야 함

  3. 부모 메소드에 존재하지 않는 필수인 파라미터가 자식 메소드에 존재하지 않아야 함

  4. 부모 메소드에 존재하는 optional 파라미터는 자식 메소드에 존재하지 않아도 됨(단, 존재할 경우 타입은 일치해야함)

  5. 자식 메소드에 optional 파라미터는 추가적으로 존재해도 됨

혹시 제가 잘못 생각한 부분인지 확인 부탁드립니다.

 

감사합니다.

답변 3

0

egpark님의 프로필 이미지

2024. 08. 01. 14:46

안녕하세요, 코드팩토리님!
이 부분은 어떻게 정리가 됐나요?

Intuitioner님의 의견으로 강의 내용이 수정되어야 하는게 맞나요?

컨펌(?)을 분명히 어딘가에 주셨을 것 같은데 제가 찾지 못하고 있는 것 같아서 여기에 문의드립니다!

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2024. 08. 02. 10:12

안녕하세요!

Intuitioner님과 basestar011님의 말씀이 맞는걸로 확인됩니다!

혼선을드려 죄송합니다!

0

basestar011님의 프로필 이미지

2024. 07. 15. 15:25

오버라이드 할 때 부모 메서드의 옵셔널 파라미터를 부모 메서드와 다른 타입으로 지정해보았더니 에러메시지에 undefined와 유니언 되어있는 걸로 나오네요.

아마 부모 메서드의 옵셔널 파라미터가 자식에서 필수 파라미터로 되는 이유가 아마 undefined와의 유니언 타입에서 내로잉 된 타입이기에 가능한 것이 아닐까 해요.

저도 이부분 강의 듣고 정리하면서 정말 안되나 테스트해봤더니 되가지고 의문이 들어 확인해봤네요..

강의 영상에 수정이 필요할 듯 합니다 😅

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

2023. 08. 01. 15:03

안녕하세요!

제가 테스트 해봤는데 현재 말씀하신 부분이 맞는걸로 확인됩니다.

다만 제가 분명 공식 다큐멘테이션에서 확인하고 테스트 한 후에 작성했던 커리큘럼이라 조금 이상하네요.

현재 레퍼런스를 못찾고 있는데 확인 후 다시한번 컨펌 드리도록 하겠습니다.

감사합니다!