将接口转换为 Typescript 中的函数参数

Ayl*_*ida 10 javascript types interface function typescript

我想知道是否可以使用接口来描述需要传递给函数的参数。一个例子如下:

  interface Person {
      name: string;
      age: number;   
  }

  function createPerson(name: string, age: number) {}
Run Code Online (Sandbox Code Playgroud)

我想使用Person接口作为createPerson参数的参考。到目前为止,我一直在使用这个:

function createPerson(name: Person['name'], age: Person['age']) {}
Run Code Online (Sandbox Code Playgroud)

虽然这比没有好,但我仍然不知道这是否是我执行此操作的最佳方法,因为我仍然需要重写所有参数名称。有更好的选择吗?提前致谢。

T.J*_*der 9

我 99.9% 确信没有一种方法可以像这样“传播”接口的类型定义,尤其是因为接口没有顺序,而函数参数有顺序。

您可以执行问题中所示的操作,或者Person直接接受对象:

function createPerson(person: Person) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

或通过解构:

function createPerson({name, age}: Person) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,您都可以使用对象来调用它,例如:

const createdPerson = createPerson({name: "Aylton Almeida", age: 20});
Run Code Online (Sandbox Code Playgroud)

  • @AyltonAlmeida - 我今天想要这个并且想知道......TypeScript 是如此的灵活......也许有什么......?所以我联系了 TypeScipt 专家 [Titian Cernicova Dragomir](/sf/users/8801411/),他确认没有办法做到这一点(至少,没有什么可以依靠的)跨 TypeScript 版本)。 (3认同)
  • @AyltonAlmeida - FWIW,您可以通过[`Parameters`实用程序类型](https://www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype)走另一种方式(稍微)。因此,如果你有(比如说)“function foo(a: string, b: number): string;”,那么“type FooParameters =Parameters<typeof foo>”就是元组类型“[a: string, b: number]” (带标签的元组,但您无法访问类型系统或代码中的元组标签)。 (2认同)