возьми меня

я есть метод, который должен принимать любой объект, если все его поля являются строками или числами

Я сделал это, что прекрасно работает с типизацией утки

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("/");
}

и позвонить

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'.

Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос