Javascript 接受通用参数和字符串数组的Typescript函数

Javascript 接受通用参数和字符串数组的Typescript函数,javascript,typescript,typescript-typings,typescript-generics,Javascript,Typescript,Typescript Typings,Typescript Generics,我制作了一个泛型函数来检查泛型对象是否具有字符串数组给定的属性。更具体地说: const staticStrings = ['name', 'age', 'address', 'photoUrl'...]; const genObject = {name: 'John Doe', bar: 'Biz'...} 并非所有的foo字符串都是bar的键,bar可以比foo有更多的键。 通常在JS中,我会实现如下内容: // This will render a component with valu

我制作了一个泛型函数来检查泛型对象是否具有字符串数组给定的属性。更具体地说:

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,我在说对象应该是泛型对象时遇到了一些问题,并且 字符串数组(StaticString)可以包含对象的键。我所尝试的:

  const renderStaticStrings = <T extends Object, K extends keyof T>(staticStrings: K[]) => (genObject: T) => {
    return staticStrings.map((ss) => {
      return genObject.hasOwnProperty(ss) ? genObject[ss] : null;
    });
  };
错误:类型为“string[]”的参数不能分配给类型为“(keyof Object)[]”的参数。 类型“string”不可分配给类型“keyof Object”

有什么想法吗?
谢谢

我认为这里没有必要使用泛型。试试这个:

const renderStaticStrings = (staticStrings: string[]) => (genObject: Record<string, any>) => {
    return staticStrings.map((ss) => {
      return genObject.hasOwnProperty(ss) ? genObject[ss] : null;
    });
  };

const staticStrings = ['name', 'age', 'address', 'photoUrl'];
const genObject = {name: 'John Doe', bar: 'Biz'}

renderStaticStrings(staticStrings)(genObject);
const renderStaticStrings=(staticStrings:string[])=>(genObject:Record)=>{
返回staticStrings.map((ss)=>{
返回genObject.hasOwnProperty(ss)?genObject[ss]:null;
});
};
const staticStrings=['name','age','address','photoUrl'];
const genObject={name:'John Doe',bar:'Biz'}
渲染静态字符串(静态字符串)(genObject);

是的,这是有效的,我尝试过相同的解决方案,但我认为拥有任何WAN都不是一个好主意。。。在这种情况下可能很有用,但是如果您没有可以使用的更窄的类型,
any
是完全可以接受的。如果您知道
genObject
的值将是
string
,您可以使用它。如果此类型不同(有时为
string
,有时为
number
,等等),则可以在该类型上创建泛型。
const renderStaticStrings = (staticStrings: string[]) => (genObject: Record<string, any>) => {
    return staticStrings.map((ss) => {
      return genObject.hasOwnProperty(ss) ? genObject[ss] : null;
    });
  };

const staticStrings = ['name', 'age', 'address', 'photoUrl'];
const genObject = {name: 'John Doe', bar: 'Biz'}

renderStaticStrings(staticStrings)(genObject);