参数隐式具有“任何”类型
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 - 反应打字稿