gpt4 book ai didi

typescript - 定义一个对象类型是另一个对象的子集

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:33 26 4
gpt4 key购买 nike

我在输入通用函数时遇到困难。该函数被赋予一个对象,并返回一个包含给定对象属性的对象。所以,一个 Partial,但是属性在编译时是已知的。这是我目前所拥有的(不起作用)。

type FromFunction = <Input, Keys extends keyof Input>(
input: Input,
keys: Array<Keys>
) => {
[property in Keys]: Input[Keys];
};



export const from: FromFunction = <Input>(input, ...keys) => {
return keys.map(key => input[key]);
}

但是当我尝试使用它时,出现了这个错误:

// use, which should return { text: 'string' }.
from({ text: 'string', other: 1 }, 'text');

// error
Argument of type '"text"' is not assignable to parameter of type '"text"[]'.ts(2345)

有没有办法做到这一点?我不想使用 anyPartial<Input> ,因为返回对象是在编译时确定的。

最佳答案

如果键在编译类型中已知,您可能想使用 Pick,它允许您从类型中选择一些属性:

type FromFunction = <Input, Keys extends keyof Input>(
input: Input,
...keys: Array<Keys>
) => Pick<Input, Keys>



export const from: FromFunction = <Input, Keys extends keyof Input>(input: Input, ...keys: Keys[]) => {
// changed the implementation, I think you want to return an object not an array.
//We can also do tuples (ie arrays) if you want but that is a bit different, let me know if that is what you need.
var result = {} as Pick<Input, Keys>
for (let k in keys) {
result[k] = input[k]
}
return result;
}

// use, which should return { text: 'string' }.
from({ text: 'string', other: 1 }, 'text');

关于typescript - 定义一个对象类型是另一个对象的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55793142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com