kakasoo

배열의 Length를 뽑는 타입 본문

프로그래밍/TypeScript

배열의 Length를 뽑는 타입

카카수(kakasoo) 2023. 1. 20. 00:01
반응형
type Length<T extends any[]> = T['length'];

타입 레벨에서의 extends 키워드는 타입 상속을 의미한다.

타입 A가 B를 상속할 때, A는 B의 모든 프로퍼티와 메서드를 상속받아야 하는데, 조건문의 의미로도 쓰인다.

A가 B를 상속받는다는 것은 최소한 A가 B와 같거나, B보다 더 구체적인 ( = 더 많은 프로퍼티를 가진 ) 것이다.

위의 Length는, 생각보다 별 거 아닌 게, 제너릭으로 받은 T는 any[]를 상속받으니 즉 어떠한 배열을 의미한다.

T가 배열이라면 반드시 내부에 length 프로퍼티가 있기 때문에, T[’length’]로 특정 프로퍼티를 뽑을 수 있다.

 

type Length<T extends any[]> = T['length'];

type A = Length<[1,2,3,4,5]>;
const length: A = 5; // 5가 아닌 경우 compile error를 뱉게 된다.

Array의 length property는 그냥 number가 아니라 number literal types다.

number literal type은 1이나 2.5, 3e5 등 특정 값을 의미하는 숫자 타입을 의미한다.

Length는 배열을 받아, 그 배열의 Length를 뽑는 타입이며, 배열의 length type은 number literal type,

즉, 항상 그 시점의 배열 크기를 반환하는 타입이 된다.

반응형

'프로그래밍 > TypeScript' 카테고리의 다른 글

NTuple 타입 정의하기  (0) 2023.01.21
type Push = <T extends any[], value> = […T, value]  (0) 2023.01.20
Extract<Type, Union>  (0) 2023.01.18
싱글턴(Singleton) 패턴이란?  (0) 2023.01.13
new (…args): T 타입이란?  (4) 2023.01.03