【发布时间】:2020-10-13 11:11:37
【问题描述】:
我有这个代码:
export interface StoreCursor {
created: Date;
id: number;
}
export default class PageUtil {
public static decode<T>(cursor?: string, dates?: (keyof T)[]): T | undefined {
if (!cursor) {
return;
}
const json = Buffer.from(cursor, "base64").toString("utf8");
return JSON.parse(json, (key, value) => (dates?.includes(key) ? new Date(value) : value));
}
}
const decoded = PageUtil.decode<StoreCursor>(cursor, ["created"]);
但我得到下一个错误,我不知道如何解决它:
错误 TS2345:“字符串”类型的参数不可分配给“keyof T”类型的参数。
我也试过了:
public static decode<T>(cursor?: string, dates?: (keyof T & string)[]): T | undefined {
[...]
}
但错误类似:
错误 TS2345:'string' 类型的参数不可分配给'keyof T & string' 类型的参数。 类型 'string' 不可分配给类型 'keyof T'。
我希望 dates 仅限于 StoreCursor 的键(或者更好,仅限于 StoreCursor 类型的 Date 键)。
【问题讨论】:
-
我猜它的抱怨是正确的,因为作为您的类型 T,您传递的是 StoreCursor,它不包含任何字符串类型的参数,而在您的 decode() 内部,第一个参数是字符串类型。所以你需要让你的泛型类型与你的函数 args 兼容。
-
是的,但我试图引用
StoreCursor(created或id)的键而不是它们的值。我也试过export interface TattooStoreCursor extends Record<string, unknown> { [...] },但错误是一样的。
标签: typescript