按类型查找对象属性

时间:2019-03-13 15:02:23

标签: typescript

我有类似

的界面
interface A {
   a: string;
}

interface B {
   b: string;
}

export interface C {
   rnd: A;
   rnd2: B;
}

我想拥有像update<T>(setting: T)这样的函数,该函数在对象中找到类型T的属性,该函数实现interface C并用{更新找到的属性(如果已经存在)的值{1}}通过了。

有没有办法实现这一目标?我尝试了迭代和setting,但是编译器返回typeof

1 个答案:

答案 0 :(得分:1)

一个可行的解决方案是传递密钥名称。您可以让编译器检查键名称是C的有效键,并且value参数的类型与C中指定的键相同:

interface A { a: string; }

interface B { b: string; }

export interface C { rnd: A; rnd2: B;}

let allSettings: C = {} as C
function update<K extends keyof C>(key: K, setting: C[K]) {
    allSettings[key]  = setting;
}

update("rnd", { a: "" }) // ok
update("rnd", { b: "" }) // err
update("rnd3", { b: "" }) // err