Игнорировать файлы * .js и * .jsx с tsconfig.json

Вот что мы пробовали:

{
  "compilerOptions": {
    "target": "esnext",
    "moduleResolution": "node",
    "allowJs": true,
    "jsx": "react"
  },
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "src/**/*.js",
    "src/**/*.jsx",
  ]
}

Когда мы запускаем tsc из командной строки, компилятор находит ошибки в файлах jsx и js. Например, мы наблюдаем эти ошибки.

src/components/foo/barHeaderStateOverview.jsx:90:46 
    - error TS8010: 'types' can only be used in a .ts file.

90   generateArbitraryData = (id: string, data: {path: string, title: string}) => {
                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

src/components/foo/barHeaderStateOverview.jsx:101:65 
    - error TS1005: ',' expected.

101     const arbitrary = this.generateArbitraryData('weight', data : (string | number));

Вероятно, проблема связана с это поведение компилятора:

... if a file B.ts is referenced by another file A.ts, then B.ts cannot be excluded unless the referencing file A.ts is also specified in the "exclude" list.

Некоторые из наших файлов * .ts действительно импортируют файлы * .js и * .jsx. Есть ли способ указать компилятору не проверять типы файлов * .js и * .jsx, которые импортирует файл * .ts?

Почему вы используете машинописный текст в файле javascript? У вас будут ошибки либо в браузере, потому что он не может анализировать TS, либо в компиляторе машинописного текста. Также опция allow js «разрешает компилировать [s] файлы JavaScript». так что вы, вероятно, хотите, чтобы это было ложью.

kyle 23.10.2018 00:42

@kyle Мы переходим от Flow к TypeScript. Синтаксис Flow аналогичен синтаксису TypeScript, и tsc не может понять: «Эй, эти файлы *.js используют синтаксис Flow, а не синтаксис TypeScript».

Shaun Luttin 23.10.2018 00:46

Вам нужно будет предоставить какую-то заглушку, которую можно было бы заменить на ее место или полностью удалить импорт. Импортируя модуль, вы просите компилятор проанализировать и использовать этот модуль. Вы не можете получить и то, и другое.

Jeff Mercado 23.10.2018 00:59

Установить allowJS: false

lbragile 18.03.2021 22:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
11
4
8 000
1

Ответы 1

Для нас этот файл tsconfig работал, чтобы игнорировать все файлы js и jsx.

{
  "compilerOptions": {
    "outDir": "build",
    "module": "esnext",
    "target": "es5",
    "lib": ["es6", "dom", "es2016", "es2017"],
    "sourceMap": true,
    "checkJs": false,
    "allowJs": true,
    "jsx": "react",
    "moduleResolution": "node",
    "forceConsistentCasingInFileNames": true,
    "experimentalDecorators": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "baseUrl": "./",
    "paths": {
      "~/*": ["*"]
    }
  },
  "include": ["./src/**/*.ts", "./src/**/*.tsx"],
  "exclude": ["node_modules", "build", "dist", "src/**/*.js", "src/**/*.jsx"]
}

Кроме того, если мы импортируем файлы .tsx | .ts в файл .jsx | .js, мы должны быть явными.

import someFile from "./path/to/file.tsx"

Мы не тестировали, но ваш может работать, если он изменен на:

    {
      "compilerOptions": {
        "target": "esnext",
        "moduleResolution": "node",
        "allowJs": true,
        "checkJs": false,
        "jsx": "react"
      },
      "include": [
        "./src/**/*.ts", "./src/**/*.tsx"
      ],
      "exclude": [
        "src/**/*.js",
        "src/**/*.jsx",
      ]
    }

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

Другие вопросы по теме