item38
any 타입은 가능한 좁은 법위에서만 사용하기
any는 매우 강력한 힘 가짐 (큰 힘에는 큰 책임이...)
// 1
function f1(){
const x: any = f3();
f4(x);
}
// 2
function f1(){
const x = f3();
f4(x as any);
}
1번 보다 2번 케이스가 더 나음, 왜냐하면 any 타입이 f4() 의 매개변수로만 들어가고 다른 곳엔 영향을 끼치지 않았기에
함수에서 any를 반환하면 영향력이 더 퍼져나감 => 반환 타입 any로 하는 것 지양할 것 + 반환 타입을 명시하는 것이 좋음
item39
any를 구체적으로 변형해서 사용하기
// 1: any 타입의 값 그대로 넣기
function getLength(array: any){
return array.length;
}
// 2: any 타입 구체화함
function getLength(array: any[]){
return array.length;
}
2번이 더 좋은 이유는
- 함수 내의 array.length 타입이 체크됨
- 함수의 반환 타입이 any 대신 number로 추론됨
- 함수 호출될 때 매개변수가 배열인지 체크됨
=> 2번은 1번과 다르게 배열이 아닌 값을 넣으면 오류를 잡아낼 수 있음
item40
함수 안으로 타입 단언문 감추기
객체가 같은지 체크하기 위해 객체 순회와 단언문은 별도의 함수로 분리해주는 것이 좋음
item41
any의 진화 이해하기
const result = []; // 타입이 any[]
result.push('a'); // 타입이 string[]
result.push(1); // 타입이 (string | number)[]
위처럼 any 타입의 진화는 noImplicitAny가 설정된 상태 즉 타입이 암시적으로 any로 추론된 경우만,
명시적으로 any를 선언했다면 any로 유지된다.
item42
모르는 타입의 값에는 any 대신 unknown 사용하기
any는
- 어떤 타입이든 any로 할당 가능
- any는 어떤 타입으로도 할당 가능
unknown은
- 어떤 타입이든 unknown 으로 할당 가능
- unknown은 오직 unknow과 any에서만 할당 가능
never은
- 어떤 타입이든 never 으로 할당 불가능
- never는 어떤 타입으로도 할당 가능
unknown은 값은 있지만 타입을 알지 못하는 경우 any 대신 사용할 수 있는 안전한 타입
item43
몽키 패치보다는 안전한 타입을 사용하기
전역 변수나 DOM에 데이터 저장말고, 데이터를 분리하여 사용할 것
내장 타입에 데이터를 저장해야 하는 경우, 안전한 타입 접근법 중 하나(보강이나 사용자 정의 인터페이스로 단언)를 사용할 것
item44
타입 커버리지를 추적하여 타입 안전성 유지
noImplicityAny 사용해도 명시적 any 혹은 서드파티 타입 선언을 통해 any 타입이 코드내에 존재할 수 있다는 점 유의할 것
'TIL > TypeScript' 카테고리의 다른 글
[TypeScript] 이펙티브 타입스크립트 item 50 ~ 52 (0) | 2022.08.09 |
---|---|
[TypeScript] 이펙티브 타입스크립트 item 45 ~ 49 (0) | 2022.08.08 |
[TypeScript] 이펙티브 타입스크립트 item 32~37 (0) | 2022.08.04 |
[TypeScript] 이펙티브 타입스크립트 item 28~31 (0) | 2022.08.03 |
[TypeScript] 이펙티브 타입스크립트 item 24~27 (0) | 2022.08.01 |
댓글