如何在Typescript中创建泛型for函数,该函数返回的确切类型取决于输入参数?

如何在Typescript中创建泛型for函数,该函数返回的确切类型取决于输入参数?,typescript,typescript-typings,typescript-generics,Typescript,Typescript Typings,Typescript Generics,我有下一个界面Params: 接口参数{ 只读参数:字符串; 只读参数B:编号; 只读参数c:只读字符串[]; } 和使用接口Params的代码: const-params:params={ 帕拉玛:“汪”, paramB:420, paramC:[“树皮”] }作为常量; getParam(键){ 返回参数[key]; } 是否可以编写一个泛型来理解通过使用确切的键调用getParam将返回什么类型的值?比如: getParam(键:K):参数类型[K]{ 返回参数[key]; } get

我有下一个界面
Params

接口参数{
只读参数:字符串;
只读参数B:编号;
只读参数c:只读字符串[];
}
和使用接口
Params
的代码:

const-params:params={
帕拉玛:“汪”,
paramB:420,
paramC:[“树皮”]
}作为常量;
getParam(键){
返回参数[key];
}
是否可以编写一个泛型来理解通过使用确切的键调用
getParam
将返回什么类型的值?比如:

getParam(键:K):参数类型[K]{
返回参数[key];
}
getParam('paramA');//一串
getParam('paramB');//数
getParam('paramC');//字符串[]

正如Aluan所说,这就是你想要的:

function getParam<K extends keyof Params>(key: K): Params[K] {
  return params[key];
}

getParam('paramA'); // string
getParam('paramB'); // number
getParam('paramC'); // readonly string[]
函数getParam(键:K):参数[K]{ 返回参数[key]; } getParam('paramA');//一串 getParam('paramB');//数 getParam('paramC');//只读字符串[]
您甚至可以更进一步,让它知道实际值:

const params = {
  paramA: 'woof',
  paramB: 420,
  paramC: ['bark']
} as const;

function getParam2<K extends keyof typeof params>(key: K): (typeof params)[K] {
  return params[key];
}

getParam2('paramA'); // "woof"
getParam2('paramB'); // 420
getParam2('paramC'); // ["bark"]
const参数={
帕拉玛:“汪”,
paramB:420,
paramC:[“树皮”]
}作为常量;
函数getParam2(键:K):(参数类型)[K]{
返回参数[key];
}
getParam2('paramA');//“纬”
getParam2('paramB');//420
getParam2('paramC');//[“树皮”]

这不是类型防护装置。无论如何,
(key:K):Params[K]
就是你想要的want@AluanHaddad哦,是吗?谢谢只是忘记了扩展的
。如何正确命名?“通用”?另外,最好将其设置为回复,将其标记为“已解决”。在
中,
扩展U
被称为泛型类型约束。这就是你的意思吗?是的,这就是我的意思。