function selectStar(star: object) {
const { id, owner, name, html_url, description, forks, watchers, language } = star
return {
id, name, html_url, description, forks, watchers, language,
owner: {
avatar_url: owner.avatar_url,
login: owner.login,
},
}
}
上面这段代码 star 只定义成 object 的时候,编辑器会提示错误:
[ts] Type 'object' has no property 'id' and no string index signature.
目前我是定义成 any,不会报错,但是这样就失去了使用 typescript 的意义,想问问大家是怎么处理的。
谢邀!
首先加上
any
是正确,也是没有毛病的。只不过我们很容易将ts语言与传统的js语言在思维上很难一下子改变。ts是编译型语言,因此在类型推导上面是需要一个明确的定义(哪声是
any
类型,tsconfig.json 也允许我们配置noImplicitAny
所有未定义类型统一使用any
为默认类型)。而对于:
只不过解构赋值,其本质相当于:
很明显
star
是一个object
类型,但这种类型在定义中的确没有id
属性;前面我说了 ts 是编译型语言需要有一个明确的类型定义。因此,如果我们按 ts 的思维,应该存在一个很明确的类型定义。例如:
当然,如按 js 的思维,应该是:
当然,后面的
const
的声明也变得无意义了。Happy coding!