Я пытаюсь создать функциональный API, который выглядит так:
createRoute('customers.view', { customerId: 1 }); // returns `/customers/1`
Однако у меня проблемы с вводом первого аргумента. Вот что у меня есть на данный момент:
const uris = {
customers: {
view: '/customers/:customerId',
},
users: {
list: '/users',
}
};
const createRoute = (route: string, routeParams: { [key: string]: string }) => {
/**
* This will split 'customer.view' each on a variable
*/
const [ resource, action ] = route.split('.');
/**
* HERE: I'm getting this error:
*
* Element implicitly has an 'any' type because expression of type 'string'
* can't be used to index type '{ customers: { view: string; } }'.
*
*/
const uri = uris[resource]?.[action]
// ... rest of code to replace the route param...
};
Я понимаю, что означает ошибка. Сигнатура функции позволяет мне передавать любые string
, но она должна быть ограничена действительными ключами объекта uri
.
Более того, второе разделение строки зависит от первого (это все-таки вложенный объект).
Можно ли это набрать?