【发布时间】:2020-06-12 20:24:31
【问题描述】:
过了一会儿,我又开始使用 TypeScript,但我被这个问题困住了。
export class CrossBrowserStorage<T> {
getValue<P extends keyof T>(
key: P,
defaultValue: T[P]
): Observable<T[P]> {
return this.getValues({ [key]: defaultValue }).pipe(map(values => values[key]));
----^ TS2345: Argument of type '{ [x: string]: T[P]; }' is not assignable
to parameter of type 'Partial '
}
getValues(keys: Partial<T>): Observable<Partial<T>> {
return from(browser.storage.sync.get(keys) as Promise<Partial<T>>);
}
}
TS2345:
'{ [x: string]: T[P]; }'类型的参数不可分配给'Partial'类型的参数
无法理解如何在保持正确输入的同时解决此问题。
【问题讨论】:
-
这是this question 和this question 混合的副本:计算的密钥扩大到
string;即使您将其缩小到P,编译器仍然无法在通用情况下进行验证。您需要使用像{ [key]: defaultValue } as Pick<T, P> as Partial<T>这样的类型断言。如果其他答案没有涵盖您的问题,请告诉我
标签: typescript