ZeroCho / ts-book

타입스크립트 교과서 소스 코드
36 stars 5 forks source link

140p readonly배열과 일반 배열의 넓은 타입 좁은 타입 질문 #54

Open roider000 opened 3 weeks ago

roider000 commented 3 weeks ago

튜플과 배열을 비교했을 때 튜플에 제약 조건이 더 붙으니 튜플이 배열보다 좁은 타입이 되는 원리라면 readonly배열과 일반 배열을 비교했을 경우 readonly배열에 제약 조건이 더 붙으니 readonly배열이 더 좁은 타입이 되어야 하는 것 아닌가요? readonly 수식어가 붙은 배열이 더 넓은 타입이 되는지 이해가 안 갑니다.

배열에 넣을 수 있는 요소의 경우의 수로 따지면 readonly 배열이 좁은 타입이 되는 것은 맞지만 타입 안정성 때문에 readonly배열이 일반 배열에 할당되지 못하고 따라서 일반 배열보다 넓은 타입으로 취급되는 것인가요?

ZeroCho commented 2 weeks ago

readonly 배열의 경우 읽기 기능만 있고(getter) 일반 배열의 경우 읽기/쓰기 기능이 있씁니다(getter/setter) 따라서 기능이 적은 readonly 배열이 더 넓은 타입니다. 뒷 부분에 객체에서 { read: func }가 { read: func, write: func }보다 더 넓은 타입이라는 것과 일맥상통합니다.

ZeroCho commented 2 weeks ago

튜플은 { length: 3 }처럼 length가 특정 숫자인데 배열은 { length: number }처럼 length가 number이라는 넓은 개념입니다. 따라서 튜플이 더 좁습니다.

더 구체적일수록 더 좁은 타입입니다.