【发布时间】:2019-03-22 08:36:34
【问题描述】:
我有如下界面:
export interface IWatchEventPayload<T> {
value?: T;
paths?: IMultiPathUpdates[];
changed?: IWatchEventChanges<T>;
}
我希望 changed 属性是一个已经/已经发生变化的属性字典。从 typing 的角度来看,这个想法是确保字典的键都是 T 的属性。这是我第一次尝试的方式:
export interface IWatchEventChanges<T, K extends keyof T> {
[prop: K]: [T[K], T[K]];
}
我曾希望,这会给我键入的哈希属性,并确保也键入“之前”和“之后”值。遗憾的是,这会导致在[prop: K] 中指出prop 必须是字符串或数字的错误。实际上它总是一个字符串,所以我做了以下操作:
export interface IWatchEventChanges<T, K extends keyof T> {
[prop: Pick<K, string>]: [T[K], T[K]];
}
但是现在保留了原来的错误,现在我在string 类型上也得到了以下信息:
类型“string”不满足约束“keyof K”。 类型 'string' 不可分配给类型 '"toString" | “价值”'。
事情变得一团糟,我有点卡住了。有人可以帮忙吗?
【问题讨论】:
标签: typescript