Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 函数返回从数组参数中输入的键定义的拾取类型_Typescript - Fatal编程技术网

Typescript 函数返回从数组参数中输入的键定义的拾取类型

Typescript 函数返回从数组参数中输入的键定义的拾取类型,typescript,Typescript,所以我想我这次运气不好,但我想在放弃这个想法之前,我会在这里试一试 我正在尝试创建一个函数,在这里您给它一个泛型,然后给它一个数组作为参数,其中包含要从泛型类型中选择的键。像这样的 型式试验={ a:布尔型; b:布尔型; c:布尔型; }; 常数t=使用([“a”,“b”); t、 a=真; t、 b=正确; t、 c=真;//`使用`不应让c可用。这将引发typescript生成错误 如果有人对此有解决方案,通用rest参数也是可能的 使用([“a”,“b”])是我发现的唯一有效的解决方案

所以我想我这次运气不好,但我想在放弃这个想法之前,我会在这里试一试

我正在尝试创建一个函数,在这里您给它一个泛型,然后给它一个数组作为参数,其中包含要从泛型类型中选择的键。像这样的

型式试验={
a:布尔型;
b:布尔型;
c:布尔型;
};
常数t=使用([“a”,“b”);
t、 a=真;
t、 b=正确;
t、 c=真;//`使用`不应让c可用。这将引发typescript生成错误
如果有人对此有解决方案,通用rest参数也是可能的


使用([“a”,“b”])是我发现的唯一有效的解决方案,但它确实很难看。

棘手,我看到的问题是Typescript似乎不允许您部分提供泛型,您要么显式提供它们,要么隐式获取它们。如果有这样的语法就好了。这是我能做的最好的了

function use<Q, S extends keyof Q>(
  q: Q,
  properties: S[]
): {
  [K in S]: Q[K];
} {
  return {} as any;
}

type Test = {
  a: boolean;
  b: boolean;
  c: boolean;
};

const t = use(<Test>null, ["a", "b"]);
函数使用(
问:问,,
属性:S[]
): {
[K in S]:Q[K];
} {
返回{}如有;
}
型式试验={
a:布尔型;
b:布尔型;
c:布尔型;
};
const t=use(null,[“a”,“b]”);
或者(我认为这更好)

function use():(p:S[])=>{[K in S]:Q[K]}{
返回{}如有;
}
型式试验={
a:布尔型;
b:布尔型;
c:布尔型;
};
const t=use()([“a”,“b]”);

希望有人能告诉我们一些棘手的问题,我看到的问题是Typescript似乎不允许您部分地提供泛型,您要么显式地提供它们,要么隐式地获得它们。如果有这样的语法就好了。这是我能做的最好的了

function use<Q, S extends keyof Q>(
  q: Q,
  properties: S[]
): {
  [K in S]: Q[K];
} {
  return {} as any;
}

type Test = {
  a: boolean;
  b: boolean;
  c: boolean;
};

const t = use(<Test>null, ["a", "b"]);
函数使用(
问:问,,
属性:S[]
): {
[K in S]:Q[K];
} {
返回{}如有;
}
型式试验={
a:布尔型;
b:布尔型;
c:布尔型;
};
const t=use(null,[“a”,“b]”);
或者(我认为这更好)

function use():(p:S[])=>{[K in S]:Q[K]}{
返回{}如有;
}
型式试验={
a:布尔型;
b:布尔型;
c:布尔型;
};
const t=use()([“a”,“b]”);

希望有人能给我们点灯

谢谢!我可以接受最后一个建议,它并不丑陋,但可能有点混乱。让我们交叉手指,希望有人袖子里套着一个摆脱包装器功能的窍门出现。谢谢!我可以接受最后一个建议,它并不丑陋,但可能有点混乱。让我们为某人祈祷,希望他能拿出一个摆脱包装器功能的窍门。