我有一个想要逐步移植到TypeScript的应用程序。我希望能够:
*.ts
文件导入Vue单个文件组件*.ts
文件导入常规*.js
文件中。*.js
个文件中的*.ts
个文件导入该应用是使用vue-cli 3.x
设置的。我正在使用Airbnb ESLint配置。
大多数应用程序都是用JS编写的,但是所有新添加的模块都是用TypeScript编写的。
添加TypeScript之前,我的.eslint.js
配置是:
module.exports = {
root: true,
env: {
node: true,
},
extends: [
'plugin:vue/essential',
'@vue/airbnb',
],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
},
parserOptions: {
parser: 'babel-eslint',
},
};
在安装@vue/cli-plugin-typescript
,typescript
和@vue/eslint-config-typescript
模块(使用vue add @vue/typescript
命令之后),我在将*.ts
文件导入{{ 1}}个文件。 这些只是ESLint错误,不是TypeScript或Babel编译错误。
因此,我对*.js
的配置进行了如下修改:
.eslint.js
我添加了module.exports = {
root: true,
env: {
node: true,
},
extends: [
'plugin:vue/essential',
'@vue/airbnb',
],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
},
overrides: [
{
files: [
'**/*.js',
'**/*.vue'
],
parserOptions: {
parser: 'babel-eslint',
},
},
{
files: [
'**/*.ts'
],
parserOptions: {
parser: 'typescript-eslint-parser',
},
}
],
};
部分,以便根据文件扩展名应用不同的解析器。
我的override
文件:
tsconfig.json
因此,这是{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"strict": true,
"jsx": "preserve",
"importHelpers": true,
"moduleResolution": "node",
"experimentalDecorators": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"sourceMap": true,
"allowJs": true,
"baseUrl": ".",
"types": [
"webpack-env",
"jest"
],
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
},
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"tests/**/*.ts",
"tests/**/*.tsx"
],
"exclude": [
"node_modules"
]
}
生成的标准tsconfig.json
。我唯一更改的是vue-cli
-有了这个,我可以导入没有allowJs: true
类型定义的JS模块-从而使迁移更加容易。
这一切似乎都已正确配置,但偶尔会出现ESLint错误。似乎有时使用d.ts
而不是babel-eslint
来整理typescript-eslint-parser
文件。我不知道如何复制它,但是我几乎可以肯定,当我将*.ts
文件导入*.ts
文件中时,它会发生。当我停止并重新启动Webpack(使用*.vue
)时,错误通常消失了。