明明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”。
image.png

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

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

const makeFullName = <Person>(obj: Person):Person & {fullName: string}  => {
  return {
    ...obj,
    fullName: obj.firstName + obj.lastName
  }
}
阅读 1.5k
2 个回答

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

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

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

const makeFullName = (obj: Person) => {
  return {
    ...obj,
    fullName: obj.firstName + obj.lastName
  }
}
const makeFullName = (obj: Person): Person & {fullName: string} => {
  return {
    ...obj,
    fullName: obj.firstName + obj.lastName
  }
}
推荐问题
logo
Microsoft
子站问答
访问
宣传栏