[英]Get type of generic's value by key declared on a property in Typescript interface and use it as the type of a function's parameter
[英]Parameter type as value of key in generic interface
我已经尽了最大的努力来制作一个类型安全的通用 function ,它将值设置为 object 约束到指定的接口。 为了更清楚地说明我想要实现的目标,这是我已经提出的:
export interface OrderFormData {
start?: {
startDate?: string;
};
verification?: {
validFrom: Date;
validTo: Date;
};
}
export class FormDataService {
testFormData: any = {};
public testSetFormData<T>(key: keyof T, value: T[keyof T]) {
this.testFormData = this.testFormData as T;
this.testFormData[key] = value;
}
func() {
this.testSetFormData<OrderFormData>('start', '')
}
}
现在,这还不算太糟糕! 但是,它没有向我显示我可以为value
-Parameter 传递什么类型,而是为我提供了界面中所有键的不同类型的列表:
我不想向我显示各种条目,而是将其减少为界面中键的值的类型(在上述情况下,它只会显示Argument of type '""' is not assignable to parameter of type '{ startDate?: string; }'
)。
我已经尝试过testSetFormData<T>(key: keyof T, value: T[key]) {...}
,但这似乎不是有效的语法。 关于如何将第一个参数合并到第二个参数的类型中的任何想法?
如果要针对特定属性,最好对每个属性使用设置器 function 而不是使用 generics。
但是,如果您想定位任何属性并使用 generics,那么您可以尝试以下操作:
function setFormData<T>(object: Partial<T>) {
testFormData = {...testFormData, ...object }
}
setFormData<OrderFormData>({ start: "" })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.