38. any 타입은 가능한 한 좁은 범위에서만 사용하기;

39. any를 구체적으로 변형해서 사용하기

function getLengthBad(array: any) {  // Don't do this!
  return array.length;
}

function getLength(array: any[]) {
  return array.length;
}
===
getLengthBad(/123/);  // No error, returns undefined
getLength(/123/);
       // ~~~~~ Argument of type 'RegExp' is not assignable
       //       to parameter of type 'any[]'
       
===

function getLength(array: any[]) {
  return array.length;
}
function hasTwelveLetterKey(o: {[key: string]: any}) {
  for (const key in o) {
    if (key.length === 12) {
      return true;
    }
  }
  return false;
}
type Fn0 = () => any;  // 매개변수 없이 호출가능한 모든함수
type Fn1 = (arg: any) => any;  // 매개변수 하나
type FnN = (...args: any[]) => any;  //모든 개수의 매개변수, Function 타입과 같음

===
const numArgsBad = (...args ; any) => args.length // any를 반환
const numArgsGood = (...args : any[]) => args.length // number를 반환
                                   

40. 함수 안으로 타입 단언문 감추기