OSSCA Chromium

기여 목록 / 8507274

Type IndexedDB key instead of any in IndexedDBViews

DevToolsrefactordevtools/devtools-frontendMerged

DevTools IndexedDBViews.ts에 jsdoc → TS 마이그레이션 당시 남겨진 any 2건을 제거한 컨트리뷰션입니다. 머지된 8500015의 후속입니다.

문제 설명

  • lastKey와 parseKey() 반환 타입이 any로 선언
    • TODO(crbug.com/1172300) + no-explicit-any 주석 동반
  • 두 값 모두 keyPath가 아니라 IndexedDB key

해결 내용

두 선언을 IDBValidKey로 지정하고 해당 주석을 제거했습니다.

- private lastKey?: any;
+ private lastKey?: IDBValidKey;

- private parseKey(keyString: string): any {
+ private parseKey(keyString: string): IDBValidKey {

근거는 최종 소비처입니다. 두 값 모두 IDBKeyRange.lowerBound()로 전달되고, 그 매개변수 타입이 IDBValidKey입니다.

const key = this.parseKey(this.#keyFilter);
const idbKeyRange = key ? window.IDBKeyRange.lowerBound(key) : null;

같은 저장소 IndexedDBModel.keyFromIDBKey()도 8500015에서 동일하게 지정했기에 일관되게 맞췄습니다.

테스트 방법

  1. panels/application:application, :unittests 빌드
  2. IndexedDBViews.test.ts → 11/11 통과

배운 점

  • 타입을 정할 때 선언부보다 소비처를 보는 것이 빠름
    • parseKey()는 JSON.parse 결과를 반환해 선언만으로는 범위가 모호하지만, 최종적으로 웹 표준 API에 전달되므로 그 시그니처가 정답이 됨
  • 앞선 CL에서 내린 타입 결정을 후속 CL에서 재사용하면 리뷰 설명 비용이 줄어듦

참고 자료