Как правильно ввести поиск Object.keys() в проекте JavaScript с включенной проверкой типов TypeScript?Javascript

Форум по Javascript
Ответить
Anonymous
 Как правильно ввести поиск Object.keys() в проекте JavaScript с включенной проверкой типов TypeScript?

Сообщение Anonymous »

Я работаю над проектом JavaScript с включенной проверкой типов TypeScript (с использованием // @ts-check или его эквивалента).
Поэтому даже мои файлы .js проверяются строго на соответствие типам TypeScript.
У меня есть объект JavaScript, который сопоставляет команды сотрудникам:

Код: Выделить всё

const TEAM_MEMBERS = {
TEAM_ALPHA: ["Alice", "Bob", "Charlie"],
TEAM_BETA: ["David", "Eve", "Frank"],
TEAM_GAMMA: ["Grace", "Heidi", "Ivan"],
};
А мои перечисления TypeScript выглядят так:

Код: Выделить всё

export enum EMPLOYEE {
ALICE = "Alice",
BOB = "Bob",
CHARLIE = "Charlie",
David = "David",
Eve = "Eve",
Frank = "Frank",
Grace = "Grace",
Heidi = "Heidi",
Ivan = "Ivan",
}

export enum TEAM {
TEAM_ALPHA = "TEAM_ALPHA",
TEAM_BETA = "TEAM_BETA",
TEAM_GAMMA = "TEAM_GAMMA",
}
Я написал функцию, возвращающую команду для данного сотрудника:

Код: Выделить всё

/**
* Get the team for a given employee.
*
* @param {import("./Types").EMPLOYEE} employee - The employee name.
* @returns {import("./Types").TEAM|undefined} The team name, or undefined if not found.
*/
function getTeam(employee) {
return Object.keys(TEAM_MEMBERS).find((teamKey) =>
TEAM_MEMBERS[teamKey].includes(employee)
);
}
Однако TypeScript выдает две ошибки:
  • Введите 'string | undefined» нельзя назначить типу «TEAM | не определено».
    Тип «строка» не может быть присвоен типу «TEAM | undefined'.ts(2322)
  • Элемент неявно имеет тип «любой», поскольку выражение типа «строка»
    не может использоваться для индексации типа '{ TEAM_ALPHA: readonly string[]; ... }'.ts(7053)
Как переписать эту функцию, чтобы TypeScript правильно определял тип возвращаемого значения как TEAM | не определено, и как мне ввести объект TEAM_MEMBERS, чтобы избежать ошибок индекса?

Подробнее здесь: https://stackoverflow.com/questions/798 ... h-typescri
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»