Задача TypeScript. Поля начинающиеся с определённого шаблона

typescript задачи

Задача

Есть сущность рабочего процесса WorkflowEntity. В ней поля начинающиеся на need — это флаги выполняемых операций.

type WorkflowEntity = {
  id: string;
  isActive: boolean;
  needImport: boolean;
  needCalculate: boolean;
  needExport: boolean;
};

Флаги выставляются чекбоксами на фронте. Решили, что бэкенд сам определять какие галочки выводить, присылая список нужных “галочек” в виде:

{
  "id": "d36f5fe2-32ea-4037-a4bd-5db7d1b02207",
  "name": "Калькуляция",
  "workflowField": "needCalculate"
}

Нужно описать тип операции так, чтобы workflowField соответствовал полям из WorkflowEntity, но только начинающимся на need.

Решение

Использовать шаблонные литералы:

type WorkflowOperation = {
    id: string;
    name: string;
    workflowField: Extract<keyof WorkflowEntity, `need${string}`>; // "needImport" | "needCalculate" | "needExport"
};