any
any는 어떤 타입이어도 상관없는 타입입니다.
TypeScript에선 컴파일 타임에 모두가 타입이 있어야 하므로 프로그래머와 TypeScript 둘 다 타입을 알 수 없는 상황에서는 기본 타입인 any라고 가정합니다.
any로 뭐든지 할 수 있지만 꼭 필요한 상황이 아니라면 사용하지 않는 것이 좋습니다. 왜냐하면 컴파일 타임에 타입 체크가 정상적으로 이뤄지지 않기 때문입니다.
타입이란 값과 값으로 수행할 수 있는 작업의 집합입니다. any는 모든 값의 집합이므로 any는 모든 것을 할 수 있습니다. 즉, any를 사용하면 값이 JavaScript처럼 동작하기 시작하면서 타입 검사기라는 마법이 더 이상 작동하지 않게 됩니다.
The any will continue to propagate through your objects:
any는 계속해서 개체를 통해 전파됩니다.
After all, remember that all the convenience of any comes at the cost of losing type safety.
결국, 모든 편의는 타입 안전성을 잃는 대가로 온다는 것을 기억하십시오.
Type safety is one of the main motivations for using TypeScript and you should try to avoid using any when not necessary.
타입 안전성은 TypeScript를 사용하는 주요 동기 중 하나이며 필요하지 않은 경우에는 any를 사용하지 않도록 해야 합니다.
드문 상황이지만 any가 꼭 필요하다면 아래처럼 사용할 수 있습니다.
let a : any = 222; // any
let b: any = ['hi']; // any
let c = a + b; // any
c에서 에러가 발생할 것 같지만, TypeScript에 두 개의 any를 더하라고 지시했으므로 에러가 발생하지 않습니다.
TSC 플래그
TypeScript의 기본 설정은 자유를 허용하므로 any로 추론되는 값을 발견하더라도 예외를 발생시키지 않습니다. 그래서 컴파일 옵션 중엔 any를 써야 하는데 쓰지 않으면 오류를 뱉도록 하는 옵션이 있습니다.
tsconfig.json 파일에서 noImplicitAny 플래그를 활성화하면 됩니다.
noImplicitAny는 TSC 플래그의 strict 패밀리에 속하므로, tsconfig.json에서 strict를 활성화했다면, noImplicitAny를 따로 활성화하지 않아도 됩니다.
Avoid leaking any
any는 존재할 수밖에 없습니다.
any로 지정된 값을 이용해서 새로운 값으로 만들어 사용하는 지점에서 누수를 막아주도록 노력이 필요합니다.
'👶 TypeScript' 카테고리의 다른 글
never (0) | 2023.01.08 |
---|---|
unknown (0) | 2023.01.08 |
Tuple (0) | 2023.01.08 |
Array (0) | 2023.01.08 |
객체(Object) (0) | 2023.01.07 |