我有一个接受通用类型的函数:
interface IFilter {
category: number;
subject: number;
}
public filter: IFilter;
protected _set<T, U>(key: T, value: U, reset?: true) {
this.filter[key] = value;
}
如何确保它key: T
是其中的一部分IFilter
,我的意思是它只能接受category
和subject
。关于相同的问题value: U
。
我认为更好的方法是传递具体类型IFilter
:
this.filter = value;
您可以使用keyof
和限制通用参数来扩展它,并使用类型查询值来确保值和键匹配:
protected _set<K extends keyof IFilter>(key: K, value: IFilter[K], reset?: true) {
this.filter[key] = value;
}
this._set("category", 0) // ok
this._set("category", "0") // error category is not string
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句