简体   繁体   English

使用 Firebase config.ts 文件设置 Vue 3 + Quasar 时,我收到此 eslint 错误:Unsafe assignment of an `any` value

[英]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.

相关问题 任何值 ESLint 错误的 Typescript 不安全分配 - Typescript Unsafe Assignment of An Any Value ESLint Error @typescript-eslint/no-unsafe-assignment:任何值的不安全赋值 - @typescript-eslint/no-unsafe-assignment: Unsafe assignment of an any value @typescript-eslint/no-unsafe-assignment: `any` 值的不安全赋值 - @typescript-eslint/no-unsafe-assignment: Unsafe assignment of an `any` value ESLint:“any”的不安全分配和“any”类型值的不安全调用 - ESLint: Unsafe assignment of an `any` and Unsafe call of an `any` typed value 任何值上的 eslint 错误不安全成员访问 ['content-type'] - eslint error Unsafe member access ['content-type'] on an any value 当类型应该隐含时,“任何”值的不安全分配? - Unsafe assignment of "any" value when type should be implicitly implied? 即使输入了函数,我也会在导入的函数上出现 no-unsafe-call 和 no-unsafe-assignment eslint 错误 - I'm Getting no-unsafe-call and no-unsafe-assignment eslint error on imported function even though function is typed VSCode Eslint 错误 no-unsafe-assignment 显示不正确 - VSCode Eslint Error no-unsafe-assignment Incorrectly Displayed 由于导入量角器,加载 config.ts 失败 - Failed loading config.ts due to import protractor 赛普拉斯和 Typescript - 您的配置文件无效:config.ts - Cypress and Typescript - your configFile is invalid: config.ts
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM