代码之家  ›  专栏  ›  技术社区  ›  Angulandy2

角度firebase参数“result”隐式具有“any”类型

  •  1
  • Angulandy2  · 技术社区  · 6 年前

    我得到了这段代码,结果和错误都有错误:

    src/app/login/phone/phone中出错。组成部分ts(48,75):错误TS7006: 参数“result”隐式具有“any”类型。 src/app/login/phone/phone。组成部分ts(53,14):错误TS7006:参数 “error”隐式具有“any”类型。

     verifyLoginCode() {
            this.windowRef.confirmationResult.confirm(this.verificationCode).then(result => {
    
                this.user = result.user;
    
              })
              .catch(error => console.log(error, "Incorrect code entered?"));
          }
    

    如何修复它?

    我用的是angularfire2,angular5。

    2 回复  |  直到 6 年前
        1
  •  4
  •   Julius Dzidzevičius    6 年前

    这个错误的原因是因为角度 tsconfig.json 默认设置为 非强制性 标记为 符合事实的 - "noImplicitAny": true, 。使用此就地生成Js代码,但您也会收到错误,因为编译器无法推断类型。

    最简单的修复方法是 then((result: any)

    现在你在评论中提到 then((result: String) 我打赌你真正的意思是 then((result: string) string String 不一样 一串 是一个Javascript原语,使用文本创建- '' "" 虽然 一串 是Javascript 对象 其原型链。

    为了便于将来参考,您可以通过控制台轻松地检查类型(如果您无法通过其他方式知道)。登录它:

    .then(result => {
      console.log(typeof result)
    })
    

    p、 因为你知道 this.user = result.user; 很明显 result 不是字符串,而是 Object

        2
  •  -1
  •   Jason Spradlin    6 年前

    typescript设置不允许您在不声明变量类型的情况下指定变量。在本例中,then方法接受一个参数“result”,但没有说明“result”是什么类型。

    将函数更新为

    .then((result: ResultType) => {
    

    哪里 ResultType 是任何结果的正确类型。

    此外,在 catch 回调, error 未指定类型。你需要改变 (error => ((error: SomeType) =>

    听起来您可能想禁用 noImplicitAny 您的 tsconfig compilerOptions 。您可能不想这样做的原因有很多(这会迫使您更加明确自己的类型,从长远来看这可能会很好),但如果您只是在尝试或尝试学习,那么您可能不希望设置选项。

    如果这个项目是为了工作,或者是由其他人管理的(例如,你只是项目中许多开发人员之一),那么你可能不想禁用它,因为他们可能想要 非强制性 基于自身原因(代码质量)。