打字稿根据输入参数返回对象键

时间:2021-02-10 12:42:07

标签: typescript

我想编写一个函数,它接受一个名称参数,然后用它来创建返回对象的属性名称:

function myFunction (name: string) {
  // ....

  return {
    [`provide${name}`]: {},
    [`consume${name}`]: {}
}

const { provideTest, consumeTest } = myFunction('Test')

我应该如何输入这个函数?

1 个答案:

答案 0 :(得分:0)

我会将其输入为 playground :

function myFunction(name: string): {
    [x: string]: {};
} {
  // ....

  return {
    [`provide${name}`]: {},
    [`consume${name}`]: {},
  };
}

const { 
  provideTest,
  consumeTest,
} = myFunction('Test');

遗憾的是,您无法根据 name 的值生成类型。


作为替代方案,您可以要求用户提供密钥,因此返回的数据将是强类型的:playground

在我看来,第一种方式更好。

function myFunction<T extends string = string>(name: string): {
    [x in T]: {};
} {
  // ....

  return {
    [`provide${name}`]: {},
    [`consume${name}`]: {},
  } as {
    [x in T]: {};
  };
}

const { 
  provideTest,
  consumeTest,
} = myFunction<'provideTest' | 'consumeTest'>('Test');