Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript函数扩展接口类型_Typescript_Generics_Typescript Generics_Typescript Types - Fatal编程技术网

Typescript函数扩展接口类型

Typescript函数扩展接口类型,typescript,generics,typescript-generics,typescript-types,Typescript,Generics,Typescript Generics,Typescript Types,我有一个函数,它接受一个没有id属性的对象数组,并返回所有添加了id属性的对象 const pickIdAndDocs = (arr) => { return arr.map(doc => ({ id: 1, ...doc })) } 现在,例如,如果我有这个接口 interface iUser { name: string; } 以及一个数组,其中包含类型为iUser let users: iUser[] = [ {name: "John&

我有一个函数,它接受一个没有id属性的对象数组,并返回所有添加了id属性的对象

const pickIdAndDocs = (arr) => {
  return arr.map(doc => ({
    id: 1,
    ...doc
  }))
}
现在,例如,如果我有这个接口

interface iUser {
  name: string;
}
以及一个数组,其中包含类型为iUser

let users: iUser[] = [ {name: "John"}, {name: "Joe"} ];
如何指定函数的返回类型pickIdAndDocs,以便它返回一个数组,其中每个项都是它所采用的输入类型的扩展类型,并带有一个添加的id属性

function pickIdAndDocs<T>(items : T[] ) : extendedT[];
函数pickIdAndDocs(items:T[]):extendedT[];
此函数可以接受任何类型的数组(始终是对象/键值对),返回带有附加id属性的所有项


还是我走错了路?谢谢:)

从本质上讲,我们希望通过组合两种类型来构建新类型。一个是
{id:number}
,另一个是传递给函数的任何内容。这正是它的作用。假设我对你问题的解释是正确的,我想这就是你想要的:

用户界面{
名称:字符串;
}
输入WithId=T&{id:number};
常量pickIdAndDocs=(arr:T[]):带ID[]=>{
返回arr.map((doc)=>({
id:1,
…博士,
}));
};
让用户:用户[]=[{name:“John”},{name:“Joe”}];
const usersWithId=pickIdAndDocs(用户);
//没有警告!
usersWithId[0].id;
usersWithId[0]。名称;
//警告:类型“WithId”上不存在属性“age”。
usersWithId[0]。年龄;

这里是TS游乐场链接:

本质上,我们希望通过组合两种类型来构建新类型。一个是
{id:number}
,另一个是传递给函数的任何内容。这正是它的作用。假设我对你问题的解释是正确的,我想这就是你想要的:

用户界面{
名称:字符串;
}
输入WithId=T&{id:number};
常量pickIdAndDocs=(arr:T[]):带ID[]=>{
返回arr.map((doc)=>({
id:1,
…博士,
}));
};
让用户:用户[]=[{name:“John”},{name:“Joe”}];
const usersWithId=pickIdAndDocs(用户);
//没有警告!
usersWithId[0].id;
usersWithId[0]。名称;
//警告:类型“WithId”上不存在属性“age”。
usersWithId[0]。年龄;

这里是TS游乐场链接:

你使用哪种服务来创建短url?@captain yossarian我使用第三方插件,如这里所述:这看起来很棒。我会试试看。谢谢你在短url中使用哪种服务?@captain yossarian我使用第三方插件,如下所述:这看起来很棒。我会试试看。谢谢