带打字稿的索引签名
Index signature with typescript
在打字稿中启用 "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;酒吧?:数字; }'没有索引签名。
你可以这样做:
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
class 或 polyfill/library 来获取搜索参数。
在打字稿中启用 "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;酒吧?:数字; }'没有索引签名。
你可以这样做:
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
class 或 polyfill/library 来获取搜索参数。