网站搜索

TypeScript - 对象可能未定义


我有以下类型:

type Person = {
  name: string 
  age: number
  value?: number
}

另外,我有一个模拟对象数组:

const arr = [
  {
    name: 'A',
    age: 1
  },
  {
    name: 'B',
    age: 2
  }
]

现在我想在数组中的每个对象中添加属性value

 const newArr = arr.map(item => {
    return {
      ...item,
      value: fun(item)
    }
  })

这里有一个可以添加值的函数

const add = (item: Person): number => {
  return item.value + 1
}

现在我们有一个 TypeScript 问题:

Object is possibly 'undefined'.ts(2532)

我很确定我做不了那样的事情,因为我需要返回一个数字?

const add = (item: Person): number => {
  return item.value && item.value + 1
}

我应该如何处理这个?

答案#1

由于你的 value 属性是 number | undefined,TypeScript 会对此报错。

答案#2

因为你将 value 定义为可选的,所以你的 add 函数无法确定它是否存在。因此,它的行为没有明确定义。如果传递的 item 没有 value 属性,它应该返回什么?

你可以让 value 成为必填属性/创建一个新接口:

interface ValuedPerson extends Person {
    value: number;
}

const add = (item: ValuedPerson): number => {
    return item.value + 1
}

或者添加一个默认值,正如这个答案所建议的那样。

在 OP 的评论之后:你可以通过添加感叹号告诉 TypeScript 它确实存在:

const add = (item: Person): number => {
    return item!.value + 1
}