У меня есть метод, который должен принимать любой объект, при условии, что все его поля являются строками или числами
Я сделал это, что прекрасно работает при наборе утки
static interpolateParams(
route: string,
params: {[key: string] : string | number}) : string {
const parts = route
.split("/")
.map(part => {
const match = part.match(/:([a-zA-Z09]*)\??/);
if (match) {
if (!params[match[1]]) {
console.error("route argument was not provided", route, match[1]);
return part;
}
return params[match[1]];
}
else {
return part;
}
})
return "/" + parts.slice(1).join("/");
}
иcall
interpolateParams("/api/:method/:value", {method: "abc", value: 10});
Теперь я хочу заставить interpolateParams
принять любой интерфейс для маршрута params
.
interpolateParams<IABCParams>("/api/:method/:value", {method: "abc", value: 10});
Проблема заключается в том, что он по-прежнему должен соответствовать ограничениям для всехполя, являющиеся строками или числами
Есть ли способ указать общее ограничение для всех полей данного интерфейса определенного типа?
Я пытался это сделать
static interpolateParams<T extends {[key: string] : string | number}>(
route: string,
params: T) : string {
и, очевидно, получил это
Тип 'IABCParams' не удовлетворяет ограничению '{[key: string]: string |число;} '.
Отсутствует подпись индекса в типе' IABCParams '.
Спасибо