2016-09-20 2 views
3

Не уверен, что мне нужно добавить другую библиотеку jshint или если я сделаю это по-другому.Javascript Не удалось проверить вычисленную ссылку на импортированное пространство имен

У меня есть файл (для пояснения причин, почему мы будем называть его вещи-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](); 
    } 
    ... 
} 

Он отлично работает, но в консоли я получаю сообщение об ошибке eslint ...

Unable to validate computed reference to imported namespace 'stuffFunctions' 

Итак, я должен пойти по этому поводу иначе или выследить какую-то библиотеку eslint, которая позволяет это?

EDIT ...

Я добавил эту строку, чтобы остановить ошибка // eslint отключения из-за он-лайн

Мне просто интересно, если там был лучший способ сделать это. Возможно, что-то вроде ...

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

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

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

Кажется, избыточным. :/

+0

Лично я думаю, что eslint делает лучшую работу в борьбе с ES6 и реагировать (JSX). Я использую eslint + jsbeautifier. – ajmajmajma

+0

Неплохо, это ошибка eslint, а не jshint. – user3379669

+0

Знаете ли вы, какое правило это значит, что тогда? – ajmajmajma

ответ

8

Ошибка сообщается в правиле import/namespace в плагине eslint-plugin-import. Это происходит потому, что вы решаете, какие импортируемая функция будет вызываться во время выполнения:

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](); 
    } 
    ... 
} 
+0

Спасибо @cartant. Я отредактировал свой оригинальный вопрос с тем, что я сделал, и другой мыслью об этом. Я просто подумал, если я получаю такую ​​ошибку, это, наверное, плохо, и, возможно, что-то нужно сделать. Все работает отлично, как я его закодировал, поэтому, возможно, подавление ошибки eslint - это то, что нужно сделать в этом случае. – user3379669

Смежные вопросы