본문으로 건너뛰기

타입 별칭: TransactionWithMutations<T, TOperation>

type TransactionWithMutations<T, TOperation> = Omit<Transaction<T>, "mutations"> & object;

정의 위치: packages/db/src/types.ts:148

하나 이상의 뮤테이션이 있는 Transaction을 위한 유틸리티 타입입니다. Transaction.commit 메서드에서 내부적으로 사용됩니다.

타입 선언

mutations

mutations: NonEmptyArray<PendingMutation<T, TOperation>>;

교차하기 전에 mutations 속성을 Transaction<T>에서 제거해야 합니다. 교차 타입의 양쪽에 동일한 속성이 나타나면 TypeScript가 해당 속성 타입을 교차하기 때문입니다.

Omit이 없으면:

  • Transaction<T>에는 mutations: Array<PendingMutation<T>>이 있습니다
  • 교차 타입은 다음을 생성합니다: Array<PendingMutation<T>> & NonEmptyArray<PendingMutation<T, TOperation>>
  • 이 배열을 매핑할 때 TypeScript는 TOperation을 특정 리터럴에서 확장합니다 (예: "delete")에서 합집합 OperationType("insert" | "update" | "delete")으로 확장합니다
  • 이로 인해 PendingMutation<T, OperationType>이 조건부 타입을 평가합니다 original: TOperation extends 'insert' ? {} : T{} | T으로 평가하며, 단순한 T으로 평가하지 않습니다

Omit을 사용하면:

  • mutationsTransaction<T>에서 먼저 제거합니다
  • 그런 다음 mutations: NonEmptyArray<PendingMutation<T, TOperation>>을 다시 추가합니다
  • TypeScript는 TOperation을 특정 리터럴 타입으로 올바르게 좁힐 수 있습니다
  • 매핑할 때 mutation.originalT로 올바르게 타입 지정되고 {} | T로는 지정되지 않도록 합니다

타입 매개변수

T

Tobject확장합니다 = Record&lt;string, unknown>

TOperation

TOperationOperationType확장합니다 = OperationType