Any
any는 TypeScript의 탈출 구문입니다.
일부 코드를 JavaScript처럼 동적으로 동작하도록 선언하고 싶을 때,
또는 타입 시스템의 제한을 벗어나고 싶을 때
any를 사용할 수 있습니다.
JSON 파싱은 any의 좋은 예시입니다.
// any를 사용한다는 것은 여러분이 코드를 더 잘 알고 있음을 뜻하기 때문에,
타입이 완전히 정확하지 않더라도 TypeScript는 코드가 안전하다고 인식합니다.
예를 들어, 아래 코드는 오류가 발생합니다.
const myObject = JSON.parse("{}");
// any를 사용하면 타입의 안전성을 희생하는 대신
코드를 원래의 JavaScript에 더욱 가깝게 작성할 수 있습니다.
any는 어떤 타입(never를 제외하고)이든
다른 타입에 할당할 수 있도록 만드는
'타입 와일드카드'와도 같습니다.
myObject.x.y.z;
// 인수의 타입을 모두 any로 대신할 수 있기 때문에
debug의 각 호출이 허용됩니다.
TypeScript는 any의 위치를
다양한 형태에서 고려합니다.
함수 인수로 사용되는 아래의 튜플이 그 예시입니다.
declare function debug(value: any): void;
debug("a string");
debug(23);
debug({ color: "blue" });
// pair의 첫 번째 any를 number로 대체하고,
두 번째 `any`를 string으로 대체하면서 인자가 매칭되기 때문에
swap 호출이 가능합니다.
튜플을 처음 봤다면, 다음을 참고하세요: example:tuples
unknown은 any의 자매 타입입니다.
만약 any가 "뭐가 최선인지 알겠어"와 같다면,
unknown은 "뭐가 최선일지 모르니까, TS에 타입을 알려줘"와 같습니다.
example:unknown-and-never
declare function swap(x: [number, string]): [string, number];
declare const pair: [any, any];
swap(pair);