[Type Script] 유효한 상태의 값만 표시할 수 있습니다.

7863 단어 TypeScript
개시하다
이 글은 JSL(일본 시스템 기술 연구) Advent Calendar 2021의 글이다.
  • 환경
  • TypeScript v4.5.3
  • 전하고 싶은 거.
  • 유효와 무효 두 가지 상태를 나타내는 유형은 오류의 근원이므로 주의해야 한다.
  • 대형 여객기 A100 추락, 수많은 희생자...
  • 비행기 설계에 관한 엔지니어의 말.
  • A 선배: "B군. 에어버스 A100의 운영체제 설계 잘 부탁드립니다."
    조종사용과 조수용의 조종대가 두 개 독립되어 있기 때문에 둘 다 작용해야 한다.
    네, 알겠습니다. 맡겨주세요.
    송이경(신지현):그렇게말하지만어떻게하지?
    interface CockpitControls {
      /** 操縦桿の角度 0 = ニュートラル */ 
      leftSideStick: number;
      rightSideStick: number;
    }
    
    B군(우선 오른쪽 조종대와 왼쪽 조종대를 모형으로 만든다.)
    (핸들을 앞으로 당기면의 높이가 높아지고, 핸들을 안으로 밀어내면의 높이가 낮아진다.이 가능하다, ~할 수 있다,...
    function getStickSetting(controls: CockpitControls) { 
      return controls.leftSideStick;
    }
    
    B군 (출력조종봉 상태의 함수는 이런 느낌인가요?아무튼, 이래도 되나요?)
    (...아, 그런데 이렇게 하면 오른쪽 조종대가 효과가 없어요.)
    
    function getStickSetting(controls: CockpitControls) { 
      const {leftSideStick, rightSideStick} = controls; 
      if (leftSideStick === 0) {
        return rightSideStick; 
      }
      return leftSideStick; }
    
    B군: "그래요. 이렇게. ok."
    (이런 줄 알았는데 왼쪽이 0인 상태에서만 오른쪽이 작용하는지 확인할 수 있는데...)
    (그렇다면 오른쪽이 0인 경우를 잠시 생각해 보자.)
    function getStickSetting(controls: CockpitControls) { 
      const {leftSideStick, rightSideStick} = controls; 
      if (leftSideStick === 0) {
        return rightSideStick;
      } else if (rightSideStick === 0) {
        return leftSideStick; 
      }
    }
    
    B군: "그래요. 그럼 어떤 조종대도 작동할 수 있겠죠."
    "A 선배님, 설치됐습니다. 댓글 주세요."
    A 선배: "어, 수고하셨습니다."
    "OK, 확인해 볼게...아, 이거, 핸들이 중성이 아니면 어떡하지?"
    B군: "아, 그렇군요. 미안합니다. 제가 수정할게요."
    (만약 쌍방이 모두 0이 아니라면 어느 조종대가 효과가 있을까...)
    "...알겠습니다좌우조종대 수치를 더해 평균을 산출합시다!"
    function getStickSetting(controls: CockpitControls) { 
      const {leftSideStick, rightSideStick} = controls; 
      if (leftSideStick === 0) {
        return rightSideStick;
      } else if (rightSideStick === 0) {
        return leftSideStick; 
      }
      return (controls.leftSideStick + controls.rightSideStick) / 2
    
    어느 날의 뉴스
    아나운서: "리우데자네이루에서 출발한 에어버스 A100이 세인트폴 군도 부근의 대서양에 추락했다."
    사고 여파로 많은 희생자가 발생했다.
    "그럼 가장 가까운 조종석에 추락한 녹음기의 소리를 들으세요."
    녹음기 소리
    야야, 나 떨어질 거야.
    추락하지 않도록 고도를 낮춰 속도를 높여야 한다.
    나와 마찬가지로 저쪽 조종대도 조작해 보세요.
    알았어, 알았어.
    운전사: 속도가 떨어졌어요.
    네, 아까부터 계속 하고 있었는데 어느새 속도가 떨어졌어요
    야, 너 지금 뭐하는 거야?
    조수석: "아까부터 조종대를 계속 당기고 있어요!"
    운전사:야,내가 조종대를 당겼는데 어떡해.
    기수를 들지 말고 내가 밟아서 속도를 내도록 해라.
    "나 떨어질 거야!"
    다음 채팅에서.
    A 선배: "비행기가 떨어진 것 같아요."
    오른쪽의 조종대는 앞으로 당기고 왼쪽의 조종대는 안으로 밀어 넣어 조작 지시가 상쇄되었다.
    B군: "네, 안 맞아요. 그런 것 같아요."
    A 선배: "원래 필요 없죠getStickSetting()?"
    함수 중 왼쪽이 0이면 ○○, 오른쪽이 0이면××잠깐만요.쓸데없는 생각 하지 마.형 정의를 단순히 이렇게 하는 게 좋지 않을까요?
    interface CockpitControls {
      stickAngle: number;
    }
    
    B군: 아... 그렇군요.
    총결산
  • 유형을 설정할 때 유효한 상태의 값만 허용합니다.
  • 코드는 쓰기 쉬워지고 검사도 쉬워졌다.
  • 참고 문헌
  • Effective TypeScript
    https://effectivetypescript.com/
  • 좋은 웹페이지 즐겨찾기