Typescript 基于输入对象字段的函数的通用返回类型
我想要一个基于输入对象的返回类型。我们在函数中实现了一个mongoose样式的字段选择器,我想实现依赖于输入对象字段的返回类型Being 以下代码示例应说明此问题:Typescript 基于输入对象字段的函数的通用返回类型,typescript,Typescript,我想要一个基于输入对象的返回类型。我们在函数中实现了一个mongoose样式的字段选择器,我想实现依赖于输入对象字段的返回类型Being 以下代码示例应说明此问题: interface IFields { _id: number; name: string; value1: string; value2: string; value3: string; value4: string; value5: string; value6: string; } expor
interface IFields {
_id: number;
name: string;
value1: string;
value2: string;
value3: string;
value4: string;
value5: string;
value6: string;
}
export interface IFieldsSelector<T> {
fields: {
[key in keyof T]?: boolean;
};
}
interface IResult extends IFields{ }
const select = (payload: IFieldsSelector<IFields>): IResult => {
return {} as IResult;
};
const result = select({
fields: {
_id: true,
value1: true,
}
});
result.value1; // ok
result._id; // ok
result.name // error
我们可以将输入键定义为泛型类型参数typescript将推断出它,然后从iFelds中将它们定义为:
我们可以将输入键定义为泛型类型参数typescript将推断出它,然后从iFelds中将它们定义为:
这似乎起到了作用,但如果我将name设置为false,则不会出现错误。const result=select{fields:{u id:true,name:false,};result.name//no errorYes,它当前选择所有提供的键,无论值是什么。我将添加一个考虑到价值的版本,这似乎是在起作用,但是如果我将name设置为false,那么我不会得到错误。const result=select{fields:{u id:true,name:false,};result.name//no errorYes,它当前选择所有提供的键,无论值是什么。稍后我将添加一个考虑价值的版本
export interface IFieldsSelector<T extends PropertyKey> {
fields: {
[key in T]?: boolean;
};
}
interface IResult extends IFields { }
const select = <T extends keyof IFields>(payload: IFieldsSelector<T>): Pick<IFields, T> => ({} as IResult);
const result = select({
fields: {
_id: true,
value1: true,
}
});
result.value1; // ok
result._id; // ok
result.name // now error