小编Evg*_*eny的帖子

Typescript泛型中对接口成员的约束

我有一个方法,它可以接受任何对象,只要它的所有字段都是字符串或数字

我做了这个,非常适合鸭子打字

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("/");
}
Run Code Online (Sandbox Code Playgroud)

并打电话

interpolateParams("/api/:method/:value", {method: "abc", value: 10});
Run Code Online (Sandbox Code Playgroud)

现在,我想interpolateParams接受route的任何接口params

interpolateParams<IABCParams>("/api/:method/:value", {method: "abc", value: 10});
Run Code Online (Sandbox Code Playgroud)

问题是它仍然应该匹配所有字符串或数字字段的约束

有没有一种方法可以在给定接口的所有字段上将泛型约束指定为特定类型?

我尝试过

static interpolateParams<T extends …
Run Code Online (Sandbox Code Playgroud)

generics interface constraints typescript

3
推荐指数
1
解决办法
517
查看次数

标签 统计

constraints ×1

generics ×1

interface ×1

typescript ×1