stc 관련 짧은 메모
tsc
코드 봐야지 봐야지 하면서 재미 없다는 이유로 안 보고 있었는데, 진짜 봐야할 것 같다.
최근 작업이 더딘 건 연말이라고 신나게 놀려다녀서지만, 한 작업을 며칠간 들고있는 것도 내 취향은 아니다.
그런데 오늘 테스트 해보면서 찾은 케이스를 보고있다가
이건 진짜 안 보고 찍는 건 불가능하다
는 최종 결론을 내렸다.
사실 이런 결론을 내려도 내가 tsc
소스코드를 언제 읽을지는 장담할 수 없다.
나한테 프로그래밍이 여전히 업무보다 취미에 가까워서 그런지 재미 없는 작업은 도저히 할 수가 없더라.
그 케이스는
declare function foo2<T>(x: T, a: (t: T) => T, b: (t: T) => T): T;
foo2(
null,
(t: Object) => t,
(t: string) => t
); // string
foo2(
"a",
(t: Object) => t,
(t: string) => t
); // Object
이다.
참고로 strict 모드를 끄면 저 두 케이스 둘 다 Object
로 추론된다.
여기서 이 케이스는 첫번째 인자를 string
이나 Object
에 할당할 수 있는지에 따라 달라지는 케이스일 것이라 추측할 수 있고, 그래서
declare function foo2<T>(x: T, a: (t: T) => T, b: (t: T) => T): T;
foo2(
1,
(t: Object) => t,
(t: string) => t
); // Object
를 시도해본 결과 Object
로 추론되더라.
이걸로 미루어볼 때 첫번째 인자가 Object
에 할당할 수 있는 값이면 Object
로 추론되는 것 같다.
근데 문제는 이런 이상한 룰이 한두개가 아니라는 것이다.
이걸 원본 소스코드 안 보고 찍어맞추는 건 내 능력 밖이다.
문제는 남이 짠 소스코드를 읽는 것처럼 재미 없는 작업을 하는 것도 내 능력 밖의 일이라는 건데...
이건 고민 좀 더 해봥야할 것 같다.