基于输入参数的Typescript返回对象键

基于输入参数的Typescript返回对象键,typescript,Typescript,我想编写一个接受name参数的函数,然后使用它创建返回对象属性名称: 函数myFunction(名称:string){ // .... 返回{ [`provide${name}`]:{}, [`consume${name}`]:{} } const{provideTest,consumertest}=myFunction('Test')) 我应该如何键入此函数?我会将其键入: 不幸的是,您无法基于name的值生成类型 或者,您可以要求用户提供密钥,以便返回的数据为强类型: 在我看来,第一种

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

函数myFunction(名称:string){
// ....
返回{
[`provide${name}`]:{},
[`consume${name}`]:{}
}
const{provideTest,consumertest}=myFunction('Test'))
我应该如何键入此函数?

我会将其键入:


不幸的是,您无法基于
name
的值生成类型


或者,您可以要求用户提供密钥,以便返回的数据为强类型:

在我看来,第一种方法更好

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');
函数myFunction(名称:字符串):{
[x在T]:{};
} {
// ....
返回{
[`provide${name}`]:{},
[`consume${name}`]:{},
}作为{
[x在T]:{};
};
}
常数{
提供测试,
消费测试,
}=myFunction(“测试”);

有趣的是,我认为如果4.1有模板文本类型,它将能够找出类型。
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');