Typescript 键入已知类型的记录

Typescript 键入已知类型的记录,typescript,Typescript,我有以下界面: export interface IWatchEventPayload<T> { value?: T; paths?: IMultiPathUpdates[]; changed?: IWatchEventChanges<T>; } 我曾希望,这样可以为我键入hash属性,并确保“before”和“after”值也被键入。不幸的是,这导致在[prop:K]中出现错误,指出prop必须是字符串或数字。实际上,它始终是一个字符串,因此我做了以下操作

我有以下界面:

export interface IWatchEventPayload<T> {
  value?: T;
  paths?: IMultiPathUpdates[];
  changed?: IWatchEventChanges<T>;
}
我曾希望,这样可以为我键入hash属性,并确保“before”和“after”值也被键入。不幸的是,这导致在
[prop:K]
中出现错误,指出
prop
必须是字符串或数字。实际上,它始终是一个字符串,因此我做了以下操作:

export interface IWatchEventChanges<T, K extends keyof T> {
  [prop: Pick<K, string>]: [T[K], T[K]];
}
导出接口IWatchEventChanges{
[prop:Pick]:[T[K],T[K];
}
但是现在保留了原来的错误,现在我还得到了
字符串
类型的以下信息:

类型“string”不满足约束“keyof K”。 类型“string”不可分配给类型“toString”|“valueOf”


事情变得一团糟,我有点卡住了。有人能帮忙吗?

作为
接口,没有办法做到这一点,但您可以改用a,并通过a为其命名,这更灵活。您想要的定义可能类似于:

export type IWatchEventChanges<T> = {
  [K in keyof T]: [T[K], T[K]];
}
导出类型IWatchEventChanges={
[K in keyof T]:[T[K],T[K];
}

希望有帮助;祝你好运

作为一个
接口,没有办法做到这一点,但您可以使用a,并通过a为其命名,这更灵活。您想要的定义可能类似于:

export type IWatchEventChanges<T> = {
  [K in keyof T]: [T[K], T[K]];
}
导出类型IWatchEventChanges={
[K in keyof T]:[T[K],T[K];
}
希望有帮助;祝你好运