typescript,如何用索引类型实现接口使用函数表达式模式?

时间:2017-06-23 05:19:41

标签: typescript

我确定了这样的界面:

export interface IPluck<T, K extends keyof T>{
  (o: T, names: K[]): T[K][];  
}

我的问题是如何使用function expression模式实现它,如下所示:

const pluck_v2: IPluck<?, ?> = (o, names) => {
  return names.map(name => o[name]);        
};

目前,它不正确。我不知道应该将哪些参数传递给IPluck

这是剩下的代码:

export interface IPerson{
    name: string;
    age: number;
  }

  const me: IPerson = {
    name: 'novaline',
    age: 23
  };

  console.log(pluck(me, ['name']));

P.S。我的英文程度不高。任何人都可以帮我编辑问题标题。感谢

1 个答案:

答案 0 :(得分:2)

Playground是你的朋友:

export interface IPerson {
    name: string;
    age: number;
}

const me: IPerson = {
    name: 'novaline',
    age: 23
};
function pluck<T, K extends keyof T>(o: T, names: K[]) {
    return names.map(name => o[name]);        
};

const pluck2 = <T, K extends keyof T>(o: T, names: K[]) => {
    return names.map(name => o[name]);            
}
type IPluck = <T, K extends keyof T>(o: T, names: K[]) => T[K][] 
const pluck3: IPluck
  = (o, names) => {
    return names.map(name => o[name]);                
}
console.log(pluck(me, ['name']));
console.log(pluck2(me, ['name']));

说明:无论是函数声明还是函数表达式,都表示函数的类型,而不是变量。这就是通用应该与函数一起使用的原因。