明明type定义的类型别名有属性,为何使用时候说没有呢?
我想要这样定义一个泛型函数:
type Person = {
age: number,
firstName: string,
lastName: string
}
const makeFullName = <Person>(obj: Person) => {
return {
...obj,
fullName: obj.firstName + obj.lastName
}
}
1、但是在VSCode中有报错信息:类型“Person”上不存在属性“firstName”。
但是命名定义的type Person 是有的啊。
2、请问下这里没有指明返回类型是可以的是吗?是否指明会更加好呢?
const makeFullName = <Person>(obj: Person):Person & {fullName: string} => {
return {
...obj,
fullName: obj.firstName + obj.lastName
}
}
回复
1个回答

test
2024-07-03
你对泛型好像有误解,泛型相当于函数参数,你这边定义的<Person>
这个跟你上面的Person
没有关系,只是刚好重名,就好比JS中:
var Person = { }
const makeFullName = Person => {}
泛型是为了给外部调用指定类型用的,比如:makeFullName<string>('') // 指定泛型Person为string,则对应传入的参数obj也须为string
,看你的意图是要指定参数为Person
这个type
,那你就不需要泛型,直接const makeFullName = (obj: Person) => {}
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容