작성
·
312
3
안녕하세요, 제네릭 강의 부분에 '정의된 타입으로 타입을 제한하기' 강의에서 여쭤보고 싶은게 생겨 질문 드립니다.
logTextLength(10); 에서 에러가 출력되는 이유가 궁금합니다.
수업과 핸드북 내용(https://joshua1988.github.io/ts/guide/generics.html#%EC%A0%9C%EB%84%A4%EB%A6%AD-%EC%A0%9C%EC%95%BD-%EC%A1%B0%EA%B1%B4)을 참조했을 때, 에러가 발생하는 이유는 logTextLength함수의 전달인자인 10인 숫자 타입에는 length 속성이 없기 때문이라고 하셨는데요,
그런데 수업 중 'T extends LengthType'으로 T 타입은 LengthType 내에 있는 모든 속성들을 갖고 있게 된다고 하셔서, logTextLength(10) 의 10이라는 숫자 타입에도 LengthType의 속성인 length를 갖게 된다고 생각했었습니다. 그런데 logTextLength(10) 이 에러를 출력하는 이유로, 10에 length 속성이 없기 때문이라고 하신 부분이 이해가 잘 안가 문의드립니다.
답변 1
0
안녕하세요 rmdk6qjs님, 강의 내용을 다시 한번 확인해 보시면 좋을 것 같아요 :) 첨부해주신 함수의 인자는 length를 가진 객체만 허용이 됩니다. 숫자 10은 length 프로퍼티가 제공되지 않기 때문에 당연히 에러가 납니다 :)
답변해주셔서 강의 돌려보고 이해됬습니다!
logTextLength함수에 T[] 대신 T extends LengthType으로 함수를 정의해 T타입에 length 속성이 있고 console.log(T.length) 에 에러가 나지 않게 된다는 설명에서 오해가 있었던 것 같습니다.
감사합니다 : )