함수를 작성하다 보면, 외부로 드러난 타입 정의는 간단하지만 내부 로직이 복잡해서 안전한 타입으로 구현하기 어려운 경우가 많습니다. 함수의 모든 부분을 안전한 타입으로 구현하는 것이 이상적이지만, 불필요한 예외 상황까지 고려해 가며 타입 정보를 힘들게 구성할 필요는 없습니다.
함수 내부에는 타입 단언을 사용하고 함수 외부로 드러나는 타입 정의를 정확히 명시하는 정도로 타협하는 것이 좋습니다. 프로젝트 전반에 위험한 타입 단언문이 드러나 있는 것 보다는 제대로 타입이 정의된 함수 안으로 타입 단언문을 감추는 것이 더 좋은 설계입니다.
|
declare function shallowEqual(a: any, b: any): boolean;
function cacheList<T extends Function>(fn: T): T{
let lastArgs: any[] | null = null;
let lastResult: any;
return function(...args: any[]) {
if(!lastArgs || !shallowEqual(lastArgs, args)) {
lastResult = fn(...args);
lastArgs = args;
}
return lastResult;
} as unknown as T;
}
|
'IT' 카테고리의 다른 글
| Effective Typescript - 42 - 모르는 타입의 값에는 any 대신 unknown을 사용하기 (0) | 2022.01.24 |
|---|---|
| Effective Typescript - 41 - any의 진화를 이해하기 (0) | 2022.01.24 |
| Effective Typescript - 39 - any를 구체적으로 변형해서 사용하기 (0) | 2022.01.24 |
| Effective Typescript - 38 - any 타입은 가능한 좁은 범위에서만 사용하기 (0) | 2022.01.24 |
| Effective Typescript - 37 - 공식 명칭(nominal typing)에는 상표를 붙이기 (0) | 2022.01.24 |