Вот что мы пробовали:
{
"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?
@kyle Мы переходим от Flow к TypeScript. Синтаксис Flow аналогичен синтаксису TypeScript, и tsc не может понять: «Эй, эти файлы *.js используют синтаксис Flow, а не синтаксис TypeScript».
Вам нужно будет предоставить какую-то заглушку, которую можно было бы заменить на ее место или полностью удалить импорт. Импортируя модуль, вы просите компилятор проанализировать и использовать этот модуль. Вы не можете получить и то, и другое.
Установить allowJS: false





Для нас этот файл 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",
]
}
Надеюсь, это поможет. У нас была та же проблема, и нам потребовалось некоторое время, чтобы все исправить
Почему вы используете машинописный текст в файле javascript? У вас будут ошибки либо в браузере, потому что он не может анализировать TS, либо в компиляторе машинописного текста. Также опция allow js «разрешает компилировать [s] файлы JavaScript». так что вы, вероятно, хотите, чтобы это было ложью.