더북(TheBook)

myForEach<K = Window>로 선언했기에 K는 기본적으로 Window입니다. 즉, thisArg를 사용하지 않으면 this의 타입이 Window가 됩니다. thisArg를 사용했다면 그 값의 타입이 this의 타입이 됩니다. thisArg{ a: 'b' }를 넣은 테스트 사례에서는 K{ a: string }이 되었으므로 this{ a: string }이 됩니다.

다만 이 타입도 정확한 타입이 아닙니다. Node.js에서는 window가 아니라 global이기 때문입니다. 타입스크립트에서 정확하게 타이핑하지 못한 이유도 실행 환경에 따라 this가 변하기 때문입니다.

자신이 만든 타입이 100% 정확한 타입인지 알 수 있는 방법은 없습니다. 심지어 타입스크립트가 미리 만들어둔 타입마저 정확한 타입이 아닙니다. 그래서 생각해낼 수 있는 테스트 사례에 모두 부합하면 그냥 잘 만들었을 것이라 믿고 사용하는 것입니다. 사용하다가 에러가 발생하는 테스트 사례가 나오면 그때 고치면 됩니다.

마지막으로 알아두어야 할 것이 있습니다. 현재 코드는 에러가 없어도 실제로 실행되지 않습니다. 배열에 myMap이라는 메서드가 존재하지 않기 때문입니다. 타이핑만 했을 뿐 myMap이라는 메서드를 구현한 적이 없습니다. 단순히 타입 선언을 통해 타입스크립트를 속였을 뿐, 자바스크립트까지 속일 수는 없습니다. 타입스크립트에서 타입에러가 없더라도 실제로 실행됨이 보장되는 것은 아니라는 점도 알아두어야 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.