使用 TypeScript 和 FirebaseAuthUI 在 Store 中使用 vue-router 进行 Vue 导航

Posted

技术标签:

【中文标题】使用 TypeScript 和 FirebaseAuthUI 在 Store 中使用 vue-router 进行 Vue 导航【英文标题】:Vue navigation with vue-router in Store using TypeScript and FirebaseAuthUI 【发布时间】:2020-10-23 08:01:45 【问题描述】:

我正在尝试学习 Vue.js,并使用 Quasar CLI 创建了一个支持 TypeScript 的 Quasar (Vue) 项目。

我正在使用 FirebaseAuthUI 进行身份验证,并创建了一个名为 firebase.ts 的引导文件。 FirebaseAuth 有一个“onAuthStateChanged”,每次用户登录或注销时都会调用它。 'onAuthStateChanged' 方法作为存储操作 (handleAuthStateChanged) 放置。

我的问题是无法在 store.ts 文件中使用 Typescript 访问 this.$router。使用商店操作中的导航是错误的吗?这是打字稿问题吗?还是我忽略了什么?

项目设置:

'handleAuthStateChanged' 在 App.vue 中注册

///App.vue

<script lang="ts">
import  mapActions  from 'vuex';

export default 
  methods: 
    ...mapActions('userStore', ['handleAuthStateChanged'])
  ,
  mounted() 
    this.handleAuthStateChanged();
  
;
</script>
///store.ts

const actions = 
  handleAuthStateChanged( commit :  commit: any ) 
    
    firebaseAuth.onAuthStateChanged(user => 
      if (user) 
        // User is logged in
    
        this.$router.push('/myPage'); //$router shows Typescript ERROR, but works???
       else 
        // User is logged out
        
        this.$route.push('/login'); //$router shows Typescript ERROR, but works???
      
    );
  ,
  logoutUser() 
    firebaseAuth.signOut();
  
;

VScode 中的错误信息:

Property '$router' does not exist on type ' handleAuthStateChanged( commit :  commit: any; ): void; logoutUser(): void; '.ts(2339)

【问题讨论】:

你有没有设法修复由 eslint 引起的实际 TS 错误。特别是在 App.vue 中以类型安全的方式使用“this”:mounted()? 【参考方案1】:

当你使用时:

          this.$router.push('/myPage'); //$router shows Typescript ERROR, but works???

您应该首先检查您正在推送的路线是否还不是当前路线。

【讨论】:

当然,- 我的错。感谢您指出了这一点。重新加载 mypage 时发生浏览器错误(它已经在该页面上并尝试再次推送 mypage)。但是,我仍然对 TS 错误感到困惑,知道如何告诉 TypeScript this.$router 吗? 你的 index.ts 中定义了 store 吗? 是的,这是由 Quasar CLI 项目创建完成的。 那我不知道。对不起。但是至少修复路线重复路线很好 也许这个***.com/a/54155543/7629020 是关于路由器的,但似乎是类似的错误模式

以上是关于使用 TypeScript 和 FirebaseAuthUI 在 Store 中使用 vue-router 进行 Vue 导航的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 身份验证中删除用户

typescript 使用TypeScript和MongoDb的Mongoose示例

typescript 使用TypeScript和MongoDb的Mongoose示例

typescript 使用TypeScript和MongoDb的Mongoose示例

TypeScript 和 JavaScript 的区别

TypeScript 和 JavaScript 的区别