当我打开TypeScript中的noImplicitAny选项时,以下代码给我带来了麻烦。在configs[basename]
,我收到错误“元素隐式地具有'any'类型,因为类型'BrowsersListConfigs'没有索引签名” 。
我可以选择对path.basename()
之类的const basename = path.basename(file) as ConfigFile
结果应用约束,也可以在类型上加上索引签名。
在结果上使用约束的前一种方法的问题在于,由于as ConfigFile
仅是编译时构造,因此它不是很有用。
除非我拼出所有属性,否则不能将索引签名放在BrowsersListConfigs
类型上,像这样:
export type BrowsersListConfigs = {
'.hintrc'? : string | string[];
'.hintrc.js'? : string | string[];
'.hintrc.json'? : string | string[];
'package.json'? : string | string[];
hintConfig? : string | string[];
[k: string]: string | string[] | undefined;
};
现在的代码(有错误):
export enum ConfigFile {
Hint = '.hintrc',
HintJs = '.hintrc.js',
HintJson = '.hintrc.json',
PackageJson = 'package.json',
}
export type BrowsersListConfigs = {
[key in ConfigFile]?: string | string[];
};
const path = {
basename: (file: string) => {
const tokens = file.split('.')
return tokens[tokens.length-1]
}
}
function groupHintConfigs(configs: BrowsersListConfigs, file: string): BrowsersListConfigs {
const basename = path.basename(file)
configs[basename] = 'hintrc'
return configs;
}
如何摆脱noImplicitAny错误?我应该使用约束还是索引签名,还是有其他方法?