해결된 질문
작성
·
63
0
안녕하세요.
복습중 이해되지 않는부분이 생겨서 질문드립니다.
let t1 = () => {};
let t2 = () => 'hello';
t1 = t2;
위 코드에 에러가 발생하지 않는 이유가 뭔가요?
어떻게 void타입에 string타입이 호환되는건지 궁금합니다.
답변 2
0
안녕하세요 이정환입니다. 예리한 질문 감사합니다 🙇♂
결론부터 말씀드리면 타입스크립트에서는 명시적으로 반환값 타입을 void로 정의한 경우가 아닌, 문맥적으로 반환값이 void 타입으로 추론되고 있는 경우에는 값의 반환을 금지하지 않습니다.
그러나 이렇게 반환된 값은 무시됩니다. 따라서 다음과 같이 t1을 호출한 결과를 특정 변수에 담으면 해당 변수의 타입은 void로 추론되기 때문에 해당 값을 별다른 연산에 활용하는것이 불가합니다.
이렇게 동작하는 이유와 더 자세한 원리에 대해서는 제 설명보다 더 좋은 아티클로 답변을 대신하면 좋을 것 같습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 김세현님.
TypeScript에서는 함수 타입의 호환성은 함수의 반환 타입이 ‘void’일 경우, 반환되는 값이 무시될 수 있기 때문에 더 유연하게 적용됩니다. 여러분의 예제 코드에서 t1
의 타입은 () => void
이고, t2
의 타입은 () => string
입니다. 하지만, TypeScript는 함수가 ‘void’ 타입을 반환한다고 해도 실제 반환 값이 있을 수 있으며, 이 반환 값은 무시될 수 있기 때문에 에러가 발생하지 않는 것입니다.
사실, t1
의 타입은 () => void
로 간주되고 t2
의 반환 타입인 string
이 void
로 치환될 수 있습니다. TypeScript는 이러한 상황에서 실제 반환되는 값이 사용되지 않음을 가정하기 때문에 두 함수 간의 할당을 허용합니다. 이는 JavaScript의 기존 코드를 원활하게 작동시키기 위한 TypeScript의 한 가지 특징입니다.
좀 더 자세히 알고 싶다면, 다음의 링크에서 관련 논의를 확인하세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.