Так что в настоящее время мы используем все строгие параметры в TypeScript 2.9, это позволило нам найти несколько проблем в нашей кодовой базе. Но теперь я столкнулся с интересной проблемой с использованием библиотеки JS, для которой требуется уникальный тип объекта.
Структура довольно проста. У нас есть объект, ключи которого являются строками, значения - это функции, которые принимают один объект, для которого определено свойство типа, совпадающее с ключом объекта, так как нам нравятся перечисления, попробовал это:
const enum Actions {
Resume = 'resume',
Stop = 'stop'
}
type action = (data: { type: Actions }) => Promise<any>;
//Types of property 'type' are incompatible. Type Actions is not assignable to type Actions.Resume
export const actions: { [key in Actions]: action} = {
[Actions.Resume]: (data: { type: Actions.Resume }) => {
return Promise.resolve();
},
[Actions.Stop]: (data: { type: Actions.Stop }) => {
return Promise.resolve();
}
}
Однако, поскольку мы используем строгие параметры, у TypeScript есть проблема с функциями их аргументом типа (см. детская площадка ). Причина, по которой мы хотим ввести объект вручную, состоит в том, чтобы убедиться, что все параметры перечисления присутствуют в объекте действий (см. Часть {[key in Actions]...}
). Но это означает, что мы также должны набирать функции, иначе мы теряем функции их типа.
Мне интересно, возможно ли это даже с помощью проверки strictFunctionTypes или существует другое решение этой проблемы.