Skip to content
English

问题覆盖检查 ​

策略的具体实现如下。

ts
export function validateAnswerBatch<Data>(
  inputIds: readonly string[],
  items: readonly AnswerItem<Data>[],
  maxItems: number,
): void {
  if (
    !Number.isSafeInteger(maxItems) ||
    maxItems < 1 ||
    !inputIds.length ||
    new Set(inputIds).size !== inputIds.length ||
    inputIds.some((id) => typeof id !== 'string' || !id)
  )
    throw new TypeError('Invalid answer input ids or limit');
  if (
    !items.length ||
    items.length > maxItems ||
    new Set(items.map((item) => item.id)).size !== items.length
  )
    throw new TypeError('Invalid answer item count or ids');
  const covered = new Set<string>();
  for (const item of items) {
    if (
      typeof item.id !== 'string' ||
      !item.id ||
      !['ready', 'unavailable', 'conflict'].includes(item.sourceStatus) ||
      !item.inputIds.length ||
      new Set(item.inputIds).size !== item.inputIds.length
    )
      throw new TypeError('Invalid answer item');
    for (const id of item.inputIds) {
      if (!inputIds.includes(id)) throw new TypeError(`Unknown answer input: ${id}`);
      covered.add(id);
    }
  }
  if (inputIds.some((id) => !covered.has(id)))
    throw new TypeError('Answer tasks do not cover every input');
}

接口参考、使用示例与开发指南。