我确定了这样的界面:
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。我的英文程度不高。任何人都可以帮我编辑问题标题。感谢
答案 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']));
说明:无论是函数声明还是函数表达式,都表示函数的类型,而不是变量。这就是通用应该与函数一起使用的原因。