Javascript无法验证对导入的命名空间的计算引用

时间:2016-09-20 15:54:54

标签: javascript reactjs eslint

不确定我是否需要添加另一个jshint库,或者我是否应该以不同的方式执行此操作。

我有一个文件(由于解释原因,我们称之为stuff-functions.js)导出这样的函数......

export function a() {
    return 'stuff';
}

export function b() {
    return 'more stuff';
}

export function c() {
    return 'even more stuff';
}

在另一个文件中,我正在导入该文件并通过参数调用该函数...

import * as stuffFunctions from './stuff-functions'

export default class someReactClass {
    myFunc(functionToCall) {
        return stuffFunctions[functionToCall]();
    }
    ...
}

它工作正常,但在控制台中我遇到了一个错误...

Unable to validate computed reference to imported namespace 'stuffFunctions'

那么,我应该以不同的方式解决这个问题,还是寻找允许这种情况的某种eslint库?

编辑...

我已添加此行以停止错误// eslint-disable-line

我很好奇是否有更好的方法来做到这一点。也许像是......

import {a, b, c} from './stuff-functions';

export default class someReactClass {
    myFunc(functionToCall) {
        const myStuffFunctions = {
            a: a,
            b: b,
            c: c
        };

        return myStuffFunctions[functionToCall]();
    }
    ...
}

虽然似乎多余。 :/

1 个答案:

答案 0 :(得分:9)

eslint-plugin-import插件中的import/namespace规则报告错误。之所以发生这种情况,是因为您决定在运行时调用哪个导入的函数:

stuffFunctions[functionToCall]();

插件的静态分析无法验证这是否为有效导入,并将其报告为错误。

最简单的解决方案是添加ESLint注释以将规则重新配置为allow computed references

/*eslint import/namespace: ['error', { allowComputed: true }]*/
import * as stuffFunctions from './stuff-functions'

export default class someReactClass {
    myFunc(functionToCall) {
        return stuffFunctions[functionToCall]();
    }
    ...
}