Typescript: Объект имеет разные ключи, одинаковые типы — Как избежать переопределения всего объекта в интерфейсе?

#typescript #typescript-typings

Вопрос:

У меня есть интерфейс с разными ключами, которые принимают одни и те же значения перечисления. Я определил тип этих значений перечисления, называемый типом крови. Могу ли я каким-то образом пропустить определение интерфейса и просто указать, что все ключи объекта должны соответствовать типу, когда я определяю свой объект?

 /** Defining types that will go into the interface */
type bloodType = {
  | "typeA"
  | "typeB"
  | "typeO"
};

/** Defining the interface */
interface IPopulation {
  "Bobby": bloodType,
  "Jimmy": bloodType,
  "Sandra": bloodType,
  "Angel": bloodType,
  "JimmyJohn": bloodType,
}

/** The actual object using the interface */
const population:IPopulation = {
  "Bobby": "typeA",
  "Jimmy": "typeB",
  "Sandra": "typeB",
  "Angel": "typeO",
  "JimmyJohn": "typeA",
}
 

могу ли я как — то пропустить определение интерфейса и просто сделать это…

 type bloodType = {
  | "typeA"
  | "typeB"
  | "typeO"
};

/** Is there some sort of shortcut like this */
const population = {
  "Bobby": "typeA",
  "Jimmy": "typeB",
  "Sandra": "typeB",
  "Angel": "typeO",
  "JimmyJohn": "typeA",
}: {string: bloodType || {}}; // <- this obv doesn't work

 

Ответ №1:

Я думаю, что вы ищете следующее:

 type BloodType = 'typeA' | 'typeB' | 'typeO';

interface IPopulation {
  [key: string]: BloodType;
}