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];
}
希望有帮助;祝你好运