我应该应用约束还是使用索引签名来消除noImplicitAny错误

时间:2019-01-03 11:15:19

标签: typescript

当我打开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错误?我应该使用约束还是索引签名,还是有其他方法?

0 个答案:

没有答案