如何保证属性是接口的一部分?

开V

我有一个接受通用类型的函数:

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,我的意思是它只能接受categorysubject关于相同的问题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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章