我有一个对象,其键在接口中定义。该对象包含对象:
class S1 { n: number; }
class S2 { n: number; }
class S3 { n: number; }
interface State {
s1: S1;
s2: S2;
s3: S3;
}
var Store: State =
{
s1: new S1(),
s2: new S2(),
s3: new S3(),
}
我正在修改一个对象并将其再次保存在商店中:
var s1 = new S1(); //for example
s1.n = 4;
Store.s1 = s1;
但现在我要续订s1
参考。
我知道我可以通过以下方式完成:
Store["s1"] = { ...Store["s1"] };
但是我想通过一种方法来实现它,它接受的只是商店的键:
function refreshStore<K extends keyof State>(k: K) {
Store[k] = {
...Store[k] //<---error
};
}
但我在这里收到错误^:
只能从对象类型
创建点差类型
问题:
如何使refreshStore
方法与预期的refreshStore('s1')
相似?
基本上我想要refreshStore('s1')
做
Store["s1"] = { ...Store["s1"] };
答案 0 :(得分:1)
由于current limitations,对象传播不能使用此通用函数。虽然这会奏效:
select * from ORDERsy
where amount < any(select amount from ORDERsy where odate = '06-oct-1999');
对象传播是function refreshStore(k: keyof State) {
Store[k] = {...Store[k]};
}
的语法糖。它可以代替使用:
Object.assign({}, ...)