Я пытаюсь определить типы возвращаемых функций, которые имеют определенное имя свойства, цель состоит в том, чтобы отфильтровать любую функцию, которая не имеет этого имени возвращаемого свойства.
Для иллюстрации, скажем, у нас есть следующий объект функций:
export const StorageActions = {
addFile: () => ({ type: 'ADD_FILE' }),
deleteFile: () => {
return () => {
return null;
};
},
};
type StorageActionsTypes = typeof StorageActions;
С помощью ReturnType я могу увидеть, какая функция имеет возвращаемое имя свойства 'type':
Чтобы проверить функции, у которых есть возвращаемое имя свойства 'type', я делаю следующее:
type filteredActions = { [K in keyof StorageActionsTypes]:
keyof ReturnType<StorageActionsTypes[K]> extends ('type') ? 'valid' : 'invalid'};
но результат неожиданный:
должно быть:
interface filteredActions {
addFile: 'valid';
deleteFile: 'invalid';
}
Я неправильно использую «extends»?Каков наилучший способ достичь этого?