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