함수가 형식이 안전하지 않은 줄 알았는데strict가 꺼졌어요.

4832 단어 TypeScript시가tech
타입이 안전하지 않아 고장이 났고 약간 빠져들었기 때문에 반성한다는 의미도 담았다.
아래의 코드가 쓰여 있다.
type FuncType = (obj: { a: number }) => void;
type FuncTypeWithExtraKey = (obj: { a: number; b: number }) => void;

const func = (fn: FuncType) => {
  fn({ a: 2 });
};

const func2: FuncTypeWithExtraKey = ({ a, b }) => {
  if (a !== undefined) {
    console.log("a is undefined");
  }
  if (b !== undefined) {
    console.log("b is undefined");
  }
};

func(func2);
FuncType 유형의 함수를 매개변수로 가져오는 함수 func를 준비합니다.FuncType은 매개 변수에서 a라는 키만 있는 대상을 떼어내고 되돌아오는 값의 유형은void형입니다.
또한FuncTypeWithExtraKey라는 유형으로 정의된func2라는 함수도 준비했다.
FuncTypeWithExtraKey는 매개 변수에서 a와 b 키를 가진 대상을 수신하고 값을 되돌려 주는 형식은void형이다.
FuncType과 FuncType WithExtraKey의 매개 변수 유형은 다르다. 원래func는 func2를 대입할 수 없었는데 대입했다.
다음 예는 func에서 func2를 읽는데 func에서 func2를 보면 열쇠가 a밖에 없는 것 같아서 B도 주고 싶으면 욕을 먹는다.
그러나func2가 없는 상황에서 a와 b는 당연히 사용할 수 있기 때문에 b는undefined 상태에서 불린다.
어떻게 이런 문제가...그러고 보니 tsconfig.json보니까 strictfalse(땀)stricttrue로 바꾸면 호되게 욕을 먹는다.
그나저나 이번 경우strictFunctionTypes만으로도 충분한데, 거기에 빠지지 않기 위해 기본적인 스트리트를 진짜로 만든 것은 나무랄 데가 없다.

좋은 웹페이지 즐겨찾기