let number: number;
number = 10;
number.toUpperCase();
// string에서만 가능한다. JS에서는 잡을 수 없는 에러지만 TS는 잡아준다.
(number as any).toUpperCase()
// TS에서 강제로 캐시팅하면 에러는 안나지만 JS에서 에러가 날 것이다.
만약 any로 강제로 캐스팅 하면 TS에서 에러를 잡지 못한다. 하지만 JS로 변환 후에는 에러가 발생한다.
const multiplyTwo = (x : number, y: number) => {
return x * y;
}
let args1: any = '코드팩토리';
let args2: any = true;
multiplyTwo(args1, args2)
// 에러가 안남 any로 캐스팅을 해버리는 순간 어떤 함수의 파라미터에든 넣을 수 있게 된다. any로 캐스팅 하지말자
// multiplyTwo('코드팩토리', true) // 에러가 난다.
any로 캐스팅을 해버리는 순간 어떤 함수의 파라미터에든 넣을 수 있게 된다.
JS에서는 에러가 발생할 것이다.
let iu: any = {name: '아이유', age:30}; //오브젝트도 any로 캐스팅하면 안된다.
오브젝트도 마찬가지로 any로 캐스팅하지 말아야 한다.
const callbackRunner = (x:number, y : number, callback:any) => { //callback을 any로 했을 때 문제를 일으키는지 알 방법이 없음
return callback(x,y);
return callback(x); // 문제를 일으키지 않음
}
const callback = (x:number, y:number) => {
return x*y;
}
callbackRunner(5,4,callback);
console.log(callbackRunner(5,4,callback))
callback을 any로 했을 때 어떤 파라미터든 가능하다.
그래서 x만 파라미터로 넘겼을 때 에러가 발생하지 않는다.
x*undefined가 되어 Nan이 뜬다.
결론 => any를 쓰지 말자