我有一个方法,应该接受任何对象,只要它的所有字段都是字符串或数字
我做了这个,它非常适合鸭子打字
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("/");
}
and 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”类型中缺少索引签名。
Thanks