我有类似
的界面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
答案 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