参数隐式具有“任何”类型

Posted

技术标签:

【中文标题】参数隐式具有“任何”类型【英文标题】: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 不会编译。

如何防止这种情况发生?

【问题讨论】:

【参考方案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 感谢您指出,这实际上是一个错字,现在已修复 只是隐藏消息,不能解决问题! 如果不想隐藏消息,采用这种方法***.com/a/66352172/3256489

以上是关于参数隐式具有“任何”类型的主要内容,如果未能解决你的问题,请参考以下文章

错误:参数“e”隐式具有“任何”类型。 TS7006 - 反应打字稿

带有泛型的 Typescript JSX - 参数隐式具有“任何”类型

元素隐式具有“任何”类型,因为类型的表达式

参数 'dispatch' 隐式具有 'any' 类型

items.map:参数“item”隐式具有“any”类型

反应/打字稿:参数“道具”隐含了“任何”类型错误