Карма-машинописный интерфейс XXX не может одновременно расширять типы YYY

My tsconfig.json is

{
  "compilerOptions": {
    "outDir": "./dist/",
    "sourceMap": true,
    "module": "es6",
    "target": "es5",
    "jsx": "react",
    "allowJs": true,
    "preserveConstEnums": true,
    "removeComments": true,
    "noImplicitAny": false,
    "moduleResolution": "node",
    "noUnusedParameters": true
  },
  "include": [
    "./src/**/*"
  ],
  "exclude": [
    "node_modules",
    "@typings",
    "typings/main",
    "typings/main.d.ts",
    "typings/index.d.ts"
  ],
  "paths": {
    "react": ["node_modules/@types/react"]
  }
}

И я добавил karma-typescript в свою конфигурацию

settings.frameworks.push('karma-typescript');
settings.preprocessors['test-bundler.js'].unshift('karma-typescript');
settings.karmaTypescriptConfig = {
    tsconfig: './tsconfig.json',
};

Используя webpack, dev-сервер и компиляция работают нормально.

А вот и фиктивный тест

describe('Root', () => {
    it('should pass', () => {
        console.log('done');
    });
});

При запуске теста я получаю

node_modules/@types/react/index.d.ts (2736,19): ошибка TS2320: интерфейс ElementClass не может одновременно расширять типы Component и Component. Именованные свойства «props» типов «Компонент» и «Компонент» не идентичны.

И аналогичные тем. Если я удалю settings.preprocessors['test-bundler.js'].unshift('karma-typescript');, тогда тест пройдет нормально (но тогда я не смогу предварительно скомпилировать машинописный текст, когда начну импортировать свои исходные файлы.

Что здесь происходит? Моя обычная сборка и dev-сервер работают нормально с tsconfig.json, что у меня


person Kousha    schedule 03.01.2018    source источник


Ответы (1)


Что здесь происходит

У вас есть два react.d.ts в контексте компиляции.

Исправить

Удалите node_modules и любые package-lock (или пряжу) и снова npm install.

Если это не сработает, найдите недопустимый модуль (все модули должны иметь react.d.ts как peerDependency, а не жесткий dependency) и сообщить об этом в своем проекте.

person basarat    schedule 03.01.2018
comment
Да, я знаю react-router, у него есть собственный react.d.ts. У меня была такая же проблема с запуском dev-server. Исправление заключалось в использовании paths в моем tsconfig.json. Я удивлен, что не соблюдается в тесте - person Kousha; 04.01.2018