[英]Function that takes a restricted generic type as parameter and return type
[英]How to create a function type which takes generic as parameter and has a return type dependent on the properties of the parameter
很抱歉标题冗长而令人困惑,但我不确定如何以一种有助于更短的方式描述必要的内容。
基本上我想做的是创建一个类型,例如func<T>(filterProps:T): SomeReturnType
其中SomeReturnType
是作为 T 的子类型创建的新类型,但只有提供的filterProps
参数中存在的字段。
例如
interface User {
name: String
age: Number
jobTitle: String
}
const user = find<User>({ name: true, age: true }) {
// return Type should be inferred to { name: string, age: number }
}
user.name // no error
user.jobTitle // should display error
您可以执行以下操作。 您需要声明一个类型,该类型将省略您不需要的道具,并且该类型应该是您的 function 的返回类型
interface User {
name: String
age: Number
jobTitle: String
}
type UserWithoutjobTitle = Omit<User, "jobTitle">;
const user = find<User>({ name: true, age: true }):UserWithoutjobTitle =>{
// return Type should be inferred to { name: string, age: number }
}
这是更新的解决方案。
function find<T ,K>(): Omit<T, Exclude<keyof T, keyof K>>
{
return {"name":'test' } as unknown as Omit<T, Exclude<keyof T, keyof K>>
};
const user = find<User,{ name: true, age: true }>();
console.log(user.name);
像这样的东西?
function find<T, K extends keyof T>(thing: T, filterProps: K[]) {
return thing as Pick<T, K>;
}
const ourUser: User = { name: 'John McClane', age: 44, jobTitle: 'Cop' };
const filteredUser = find(ourUser, ['name', 'age']); // Pick<User, "name" | "age">
filteredUser.name; // String
filteredUser.age; // Number
filteredUser.jobTitle; //error
也许您的版本会从 function 主体中“找到”该thing
,而不是将其作为参数传递。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.