明明type定义的类型别名有属性,为何使用时候说没有呢?

作者站长头像
站长
· 阅读数 10

我想要这样定义一个泛型函数:


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定义的类型别名有属性,为何使用时候说没有呢?

但是命名定义的type Person 是有的啊。

2、请问下这里没有指明返回类型是可以的是吗?是否指明会更加好呢?

const makeFullName = <Person>(obj: Person):Person & {fullName: string}  => {
  return {
    ...obj,
    fullName: obj.firstName + obj.lastName
  }
}
回复
1个回答
avatar
test
2024-07-03

你对泛型好像有误解,泛型相当于函数参数,你这边定义的<Person>这个跟你上面的Person没有关系,只是刚好重名,就好比JS中:

var Person = { }
const makeFullName = Person => {}

泛型是为了给外部调用指定类型用的,比如:makeFullName<string>('') // 指定泛型Person为string,则对应传入的参数obj也须为string,看你的意图是要指定参数为Person这个type,那你就不需要泛型,直接const makeFullName = (obj: Person) => {}

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