属性'fullName'隐式具有类型"any",因为它的 set 访问器缺少参数类型注释



我正在学习JS课程。他使用了以下代码,但当我添加它时,它不起作用。它返回undefined。问题出现在"set fullName"这是VS代码的错误:

"属性‘fullName’隐式具有类型‘any’,因为它的集合访问者缺少参数类型注释">

控制台给出未定义的。

我在谷歌上搜索了一下,看到了一些typescript版本,但我使用的是VSCODE提供的最新版本,typescript的版本是3.9.0

class Person {
constructor(firstname, lastName, age, likes = []) {
this.firstName = firstname
this.lastName = lastName
this.age = age
this.likes = likes
}
getBio() {
let bio = `${this.firstName} is ${this.age}.`
this.likes.forEach( (like) => {
bio = bio + ` ${this.firstName} likes ${like}.`
}) 
return bio        
}
set fullName(fullName) {
const names = fullName.split(' ')
this.firstName = names[0]
this.lastName = names[1]
}

}

"问题"在于tsconfig。

您的项目根目录中有一个名为tsconfig.json的文件,其中有以下行:

noImplicitAny: "true"

如果您没有tsconfig.json,那么vscode可能会使用具有此选项的默认配置运行,并且您可以创建tsconfig来设置该选项。

这意味着你不能在类型隐式为any的地方编写代码,你需要显式声明它的类型,或者以可以推断它的类型的方式编写它。因此,您可以将该选项切换到false(不推荐(,也可以显式声明您的类型

set fullName(fullName: string) {

你可能想养成在任何地方都这样做的习惯:

constructor(firstname: string, lastName: string, age: number, likes: string[] = []) {

这只是一个个人的注意事项,当然听起来已经过时了,或者对于打字脚本来说不是很好,如果他们使用隐式任何允许的方式进行编码的话。

最新更新