check demo on typescript playground
将选项noImplicitAny
设置为true
,然后抛出错误。
如何解决此问题,而不将noImplicitAny
设置为false
。
代码:
function get(params = {}):string {
let url = '';
const paramStr = Object.keys(params).reduce((str, key) => {
const pairStr = `${key}=${params[key]}`;
return str.indexOf('?') !== -1 ? `&${pairStr}` : `?${pairStr}`;
}, '');
url += paramStr;
console.log(url);
return url;
}
答案 0 :(得分:2)
这种情况正在发生,因为params
没有与之关联的类型签名。您需要提供一个签名,用于定义字典中key
和value
对的类型。
你可以这样做:
function get(params: { [key: string]: string } = { }):string {
此问题的一个更明显的例子是:
const dict = {};
dict[5] = "five";
在您为dict
提供类型签名之前,这将导致错误:
const dict: { [key: number]: string } = {};
dict[5] = "five";
答案 1 :(得分:1)
例如,您可以明确指定类型:
function get(params: { [key: string]: any } = {}): string {
let url = '';
const paramStr = Object.keys(params).reduce((str, key) => {
const pairStr = `${key}=${params[key]}`;
return str.indexOf('?') !== -1 ? `&${pairStr}` : `?${pairStr}`;
}, '');
url += paramStr;
console.log(url);
return url;
}
PS:基本上所有类似的问题都可以通过提供具体类型来解决。