在打字稿中启用“noImplicitAny”时,确定正确的索引签名是个问题。
const getFromUri = () => {
const urlSearch = window.location.search.substring(1);
const params: { foo?: number; bar?: number } = {};
if (urlSearch && urlSearch.length > 0) {
const urlParams = urlSearch.split("&");
urlParams.forEach((e: string) => {
const obj = e.split("=");
params[obj[0]] = obj[1];
});
}
};
它在最后一行说: 错误:(17,11)TS7017:元素隐含地具有'any'类型,因为类型'{foo?:number;吧?:号码; }'没有索引签名。
答案 0 :(得分:2)
您可以这样做:
const getFromUri = () => {
const urlSearch = window.location.search.substring(1);
// Always extract useful types
type Params = { foo?: number; bar?: number };
const params: Params = {};
if (urlSearch && urlSearch.length > 0) {
const urlParams = urlSearch.split("&");
urlParams.forEach((e: string) => {
// Assume key here
const obj = <[keyof Params, string]>e.split("=");
// Forgot to parse
params[obj[0]] = parseInt(obj[1]);
});
}
};
顺便说一句,不要这样做。只需使用URL
类或polyfill / library来获取搜索参数。