扩展接口时如何在特定键内添加值?

How to add a value within specific key when extending an interface?

假设我有一个接口:

interface Person {
  age: number
  name: {
    first: string
    second: string
  }
}

我想将 Person 扩展到 Friend,这看起来与 Person 完全相同,但在 name 中增加了 nickname 值,像这样:

interface Friend {
  age: number
  name: {
    first: string
    second: string
    nickname: string | null
  }
}

我知道我能做到...

interface Friend extends Person {
  nickname: string | null
}

...但这会将其添加到 name.

之外

我想不出任何方法来实现这个,有什么想法吗?

您可以将 name: { first: string, second: string } 提取到一个单独的界面中并对其进行扩展。 例如:

interface Person {
  age: number
  name: Name
}

interface Friend extends Person{
    name: FriendName
}

interface Name {
    first: string
    second: string
}

interface FriendName extends Name {
    nickname?: string
}

TS playground

您可以使用 type 关键字代替 interface:

type Friend = Person & {
   name: {
     nickname: string
   }
};