배열을 따로 다루는 이유는 tsc에서 배열은 obj밑의 개념이다
(obj 밑은 tuple이 자리를 차지한다.)
아무튼 generic type을 사용하며 배열을 받기 위해서는
아래와 같이 코드를 짜야한다.
let output=identity3=<T>(arg:T[]):void=>{
return arg.length
}
만약 아래와 같이 코드를 짜게 된다면 오류를 보게 된다.
function loggingIdentity<T>(arg:T):void{
console.log(arg.length)
}
이유는 단순하다. generic은 입력값의 타입을 스냅샷에 담아
입력값이 들어오고 나서야 해당 타입을 확인할 수 있다.
그런데 무슨 값이 들어올지 모르는 자리에 length method를 사용하는 것은
말이 안된다.
따라서 위 코드는 에러를 내뿜는 것이 당연하다.
또 다른 사용가능한 방법은 아래와 같다.
const loggingTest=<T>(arg:Array<T>):number=>{
console.log(arg.length);
return arg.length;
};
let loggingTestOutput=loggingTest([1,2,3]);
console.log('loggingTestOutput: ',loggingTestOutput);
// expected 3