开启TS严格模式后索引类型报错,求函数类型优化方案
问题解决:TypeScript严格模式下参数类型报错修复
问题核心是你把函数参数类型设为object,严格模式下TypeScript不允许直接用字符串索引访问这类宽泛类型的属性(比如params['_isRegExp']),因为object类型没有定义任何已知属性。
以下是符合TypeScript严格类型要求的修改版本:
/** Returns a string of parameters ready to be appended to a GET request */ export function objectParameterize(params: { _isRegExp?: boolean; [key: string]: string | number | boolean; }): string { let parameters = ''; const isRegExp: boolean = params._isRegExp === true; for (const key in params) { if (key && key !== '_isRegExp') { if (parameters !== '') { parameters = `${parameters}&`; } const value = params[key]; if (isRegExp) { parameters = `${parameters}${key}=${value}`; } else { parameters = `${parameters}${key}=${encodeURIComponent(String(value))}`; } } } return parameters ? `?${parameters}` : ''; }
关键修改说明:
- 精确参数类型:替换宽泛的
object为包含可选_isRegExp属性和字符串索引签名的类型,明确允许的参数结构,让TypeScript能正确推断属性类型。 - 返回类型修正:把
any改成string,函数明确返回字符串,类型更安全且符合实际逻辑。 - 简化判断逻辑:直接用
params._isRegExp === true判断,属性不存在时表达式自动为false,和原逻辑一致但更简洁。 - 值类型兼容处理:用
String(value)确保所有参数值都能转为字符串,避免encodeURIComponent接收非字符串类型的警告。
内容的提问来源于stack exchange,提问作者Scott B
相关产品推荐
相关产品推荐

