[英]When setting up Vue 3 + Quasar with a Firebase config.ts file I get this eslint error: Unsafe assignment of an `any` value
I have just setup a fresh Vue 3 Quasar project using the Quasar CLI.我刚刚使用 Quasar CLI 设置了一个新的 Vue 3 Quasar项目。
And I have created a new src/firebase/config.ts
file to store my firebase configuration, it looks like this:我创建了一个新的
src/firebase/config.ts
文件来存储我的 firebase 配置,它看起来像这样:
// Import the functions you need from the SDKs you need
import { initializeApp } from 'firebase/app';
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
import { getFirestore, serverTimestamp } from 'firebase/firestore';
import { getAuth } from 'firebase/auth';
import { getStorage } from 'firebase/storage';
// Your web app's Firebase configuration
const firebaseConfig = {
apiKey: 'REDACTED',
authDomain: 'REDACTED',
projectId: 'REDACTED',
storageBucket: 'REDACTED',
messagingSenderId: 'REDACTED',
appId: 'REDACTED',
measurementId: 'REDACTED',
};
// Initialize Firebase
const firebaseApp = initializeApp(firebaseConfig);
//Export modules
export const db = getFirestore(firebaseApp);
export const store = getStorage(firebaseApp);
export const auth = getAuth(firebaseApp);
export const timestamp = serverTimestamp();
But the const firebaseApp = initializeApp(firebaseConfig);
但是
const firebaseApp = initializeApp(firebaseConfig);
line is throwing an eslint error of Unsafe assignment of an 'any' value. eslint@typescript-eslint/no-unsafe-assignment
行抛出
Unsafe assignment of an 'any' value. eslint@typescript-eslint/no-unsafe-assignment
Unsafe assignment of an 'any' value. eslint@typescript-eslint/no-unsafe-assignment
. Unsafe assignment of an 'any' value. eslint@typescript-eslint/no-unsafe-assignment
。
Here is the .eslintrc.js
file made by Quasar CLI during project creation:这是 Quasar CLI 在项目创建期间生成的
.eslintrc.js
文件:
const { resolve } = require('path');
module.exports = {
// https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy
// This option interrupts the configuration hierarchy at this file
// Remove this if you have an higher level ESLint config file (it usually happens into a monorepos)
root: true,
// https://eslint.vuejs.org/user-guide/#how-to-use-custom-parser
// Must use parserOptions instead of "parser" to allow vue-eslint-parser to keep working
// `parser: 'vue-eslint-parser'` is already included with any 'plugin:vue/**' config and should be omitted
parserOptions: {
// https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser#configuration
// https://github.com/TypeStrong/fork-ts-checker-webpack-plugin#eslint
// Needed to make the parser take into account 'vue' files
extraFileExtensions: ['.vue'],
parser: '@typescript-eslint/parser',
project: resolve(__dirname, './tsconfig.json'),
tsconfigRootDir: __dirname,
ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features
sourceType: 'module' // Allows for the use of imports
},
env: {
browser: true
},
// Rules order is important, please avoid shuffling them
extends: [
// Base ESLint recommended rules
// 'eslint:recommended',
// https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin#usage
// ESLint typescript rules
'plugin:@typescript-eslint/recommended',
// consider disabling this class of rules if linting takes too long
'plugin:@typescript-eslint/recommended-requiring-type-checking',
// Uncomment any of the lines below to choose desired strictness,
// but leave only one uncommented!
// See https://eslint.vuejs.org/rules/#available-rules
'plugin:vue/vue3-essential', // Priority A: Essential (Error Prevention)
// 'plugin:vue/vue3-strongly-recommended', // Priority B: Strongly Recommended (Improving Readability)
// 'plugin:vue/vue3-recommended', // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead)
// https://github.com/prettier/eslint-config-prettier#installation
// usage with Prettier, provided by 'eslint-config-prettier'.
'prettier'
],
plugins: [
// required to apply rules which need type information
'@typescript-eslint',
// https://eslint.vuejs.org/user-guide/#why-doesn-t-it-work-on-vue-file
// required to lint *.vue files
'vue',
// https://github.com/typescript-eslint/typescript-eslint/issues/389#issuecomment-509292674
// Prettier has not been included as plugin to avoid performance impact
// add it as an extension for your IDE
],
globals: {
ga: 'readonly', // Google Analytics
cordova: 'readonly',
__statics: 'readonly',
__QUASAR_SSR__: 'readonly',
__QUASAR_SSR_SERVER__: 'readonly',
__QUASAR_SSR_CLIENT__: 'readonly',
__QUASAR_SSR_PWA__: 'readonly',
process: 'readonly',
Capacitor: 'readonly',
chrome: 'readonly',
defineProps: 'readonly',
defineEmits: 'readonly',
defineExpose: 'readonly',
withDefaults: 'readonly'
},
// add your custom rules here
rules: {
'prefer-promise-reject-errors': 'off',
// TypeScript
quotes: ['warn', 'single', { avoidEscape: true }],
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
// allow debugger during development only
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
}
}
I'm not sure why I am seeing this error.我不确定为什么会看到此错误。
When creating projects using the Vue CLI instead of the Quasar CLI I do not get the same error.使用 Vue CLI 而不是 Quasar CLI 创建项目时,我没有收到相同的错误。
Since the Vue CLI creates a different type of .eslintrc.js
compared to the Quasar CLI .eslintrc.js
file I assume the problem is the configuration chosen by the Quasar CLI.由于与 Quasar CLI
.eslintrc.js
文件相比,Vue CLI 创建了不同类型的.eslintrc.js
文件,我认为问题出在 Quasar CLI 选择的配置上。
Here is a copy of the .eslintrc.js
file from the projects created using the Vue CLI.这是使用 Vue CLI 创建的项目中的
.eslintrc.js
文件的副本。
Maybe to fix the errors some parts of this version could be safely merged into the .eslintrc.js
file created by Quasar?也许为了修复错误,这个版本的某些部分可以安全地合并到 Quasar 创建的
.eslintrc.js
文件中?
module.exports = {
root: true,
env: {
node: true,
},
extends: [
"plugin:vue/vue3-essential",
"eslint:recommended",
"@vue/typescript/recommended",
"@vue/prettier",
"@vue/prettier/@typescript-eslint",
],
parserOptions: {
ecmaVersion: 2020,
},
rules: {
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
},
globals: {
defineProps: 'readonly',
defineEmits: 'readonly',
defineExpose: 'readonly',
withDefaults: 'readonly'
}
};
I'm not sure if this will work, but try declaring the type for your config:我不确定这是否可行,但请尝试为您的配置声明类型:
const firebaseConfig: FirebaseOptions = ...
and for your firebase app:对于您的 firebase 应用程序:
const firebaseApp: FirebaseApp = initializeApp(firebaseConfig);
And import those types:并导入这些类型:
import { FirebaseOptions, FirebaseApp, initializeApp } from "firebase/app";
This feels a bit stupid, but all I had to do was restart my IDE (Visual Studio Code) and the errors went away.这感觉有点愚蠢,但我所要做的就是重新启动我的 IDE(Visual Studio 代码),错误就消失了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.