【问题标题】:parameter implicitly has an 'any' type参数隐式具有“任何”类型
【发布时间】:2018-05-30 15:12:56
【问题描述】:

我将 Visual Studio 代码用于 typescript 项目,其中我使用了一些 3rd 方 npm js 库。其中一些不提供任何 ts 类型(types.d.ts 文件),因此每当我使用参数或变量而不指定其类型时,vs 代码的 linting 都会显示此错误:parameter 隐式具有“任何”类型。 另外,ts 不会编译。

如何防止这种情况发生?

【问题讨论】:

    标签: typescript visual-studio-code typescript-typings


    【解决方案1】:
    import { Component, OnInit } from '@angular/core';
    
    
    @Component({
      selector: 'app-info',
      templateUrl: './info.component.html',
      styleUrls: ['./info.component.css']
    })
    export class InfoComponent implements OnInit {
    
      constructor() { }
    
      ngOnInit(): void {
    
    
      }
      onNameChange(ngModelObj){
        console.log(ngModelObj);
        
        enter code here
    
      }
    }
    

    【讨论】:

    • ....component.ts
    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    这对我有用。 检查我如何使用 x 变量

       From
    
         const user = users.find(x => x.username === username && x.password === password);
    
       To
    const user = users.find((x:any) => x.username === username && x.password === password);
    

    【讨论】:

      【解决方案3】:

      我最终出现以下错误。这是 Bing 上的第一个搜索结果,因此,如果对某人有帮助,请提出我的解决方案。

      参数“onPerfEntry”隐含地具有“任何”类型。 TS7006

      我是这样解决的。

      之前

      const reportWebVitals = onPerfEntry  => {
      

      之后

      const reportWebVitals = (onPerfEntry : any) => {
      

      我理解这是一件简单的事情,但对于像我这样的初学者来说,这需要我一段时间才能弄清楚。

      【讨论】:

      • 这个简单的解决方案解决了我的问题:)
      【解决方案4】:

      对于那些:

      • 在导入像import mymodule from '@/path/to/mymodule.js'这样的js文件时出现这个问题
      • 并且不想将 noImplicitAny 设为 false

      你可以:

      • 创建一个名为index.d.ts的文件
      • 放一些类似的东西
      declare module '@/path/to/mymodule.js'
      // or using wild card *, like `declare module '@/store/*.js'`
      

      【讨论】:

      • 谢谢,这很有用
      【解决方案5】:

      ** 我不想修改配置文件和简化打字稿!!

      这段代码给我带来了错误:

        onDelete(todo) {
          console.log('delete')
          this.deleteTodo.emit(todo)   
        }
      

      我通过添加“任何”类型来修复我的问题:

        onDelete(todo: any) {
          console.log('delete')
        this.deleteTodo.emit(todo)   
        }
      

      【讨论】:

      • 虽然我们感谢您的回答,但如果它在其他答案之上提供额外的价值会更好。在这种情况下,您的答案不会提供额外的价值,因为 LLL 已经发布了该解决方案。如果之前的答案对您有帮助,那么您应该在获得足够声誉后投票。
      【解决方案6】:

      指定类型:例如(callback:any) => { }

      【讨论】:

      • 这是一个更好的答案。另一个只是隐藏消息,而不是修复它所抱怨的内容。
      • 使用any 类型只是为了修复编译时错误是一种不好的做法。
      • @SerhiiPolishchuk 这不是坏习惯。你的反应是任何对动态类型语言感到不舒服的人的反应,这没关系。这是在任何具有 Duck Typing 形式的语言中都可以找到的熟悉语法。 “任何”有效并且是可以接受的,因为预期对象没有真正的结构。见docs
      • 我对严格的类型提示和动态也很满意,因为我从 5.2 版开始使用 php。我认为对于还不知道为什么要指定类型的人来说,值得一提。请将其添加到您的答案中,以使这个世界更加安全。人们应该知道真相 - 为参数指定类型可以节省时间和金钱 - 如果您知道确切的类型,请使用它。非常有限的情况需要 类型。
      • 当你想指定一个类型时不要忘记 () 大括号。没有它们,它就行不通。
      【解决方案7】:

      首先,要使 typescript 允许参数而不声明其类型,请编辑 tsconfig.json

      // disable this rule:
      // "strict": true,
      
      // enable this rule:
      "noImplicitAny": false
      

      其次,安装tslint npm包作为tslint vs代码扩展的先决条件

      npm install -g tslint
      

      三、安装tslint vs code extension

      【讨论】:

      • 如果您没有 tsconfig.js 文件,请在您的 tsconfig.json 文件中进行相同的更改。
      • @SrijanChaudhary 感谢您指出,这实际上是一个错字,现在已修复
      • 只是隐藏消息,不能解决问题!
      • 如果不想隐藏消息,采用这种方法stackoverflow.com/a/66352172/3256489
      猜你喜欢
      • 2021-06-09
      • 2021-07-20
      • 2020-02-20
      • 1970-01-01
      • 2023-03-08
      • 2020-02-02
      • 2019-11-21
      • 2021-03-29
      • 1970-01-01
      相关资源
      最近更新 更多