【发布时间】:2021-08-03 18:37:22
【问题描述】:
我正在创建一个泛型函数来检查泛型对象是否具有由字符串数组给出的属性。具体来说:
const staticStrings = ['name', 'age', 'address', 'photoUrl'...];
const genObject = {name: 'John Doe', bar: 'Biz'...}
不是所有的 foo 字符串都是 bar 的键,bar 可以有比 foo 更多的键。 通常在 JS 中我会实现这样的东西:
// This will render a component with value of genObject[ss] or null
const renderStaticStrings = (staticStrings) => (genObject) => {
return staticStrings.map((ss) => {
return genObject.hasOwnProperty(ss) ? (
genObject[ss]
) : null;
});
};
使用 Typescript,我在说对象应该是通用对象时遇到了一些麻烦,并且 字符串数组(staticStrings)可以包含对象的键。我尝试过的:
const renderStaticStrings = <T extends Object, K extends keyof T>(staticStrings: K[]) => (genObject: T) => {
return staticStrings.map((ss) => {
return genObject.hasOwnProperty(ss) ? genObject[ss] : null;
});
};
实现:
renderStaticStrings(staticStrings)(completeProfile?.profile)}
错误:'string[]' 类型的参数不能分配给'(keyof Object)[]' 类型的参数。 类型“字符串”不可分配给类型“keyof Object”
有什么想法吗? 谢谢
【问题讨论】:
标签: javascript typescript typescript-typings typescript-generics