【发布时间】:2021-11-16 17:08:04
【问题描述】:
我不明白为什么 typescript 给我这个错误:
这是相关代码:
getFeaturesFromMembership$<T extends keyof MembershipFeatures,
U extends Record<T, boolean>>(membership$: Observable<Membership>,
featureKeys: T[],
isPreview$: Observable<boolean> = of(false)
): Observable<U> {
return combineLatest([membership$, isPreview$])
.pipe(
map(([membership, isPreview]) => {
const features: U = {} as U;
for (const key of featureKeys) {
features[key] = false; // <- error here
}
if (!membership || isPreview) {
Object.keys(features).forEach(key => features[key] = true);
return features;
}
Object.keys(features).forEach(key => features[key] = key in membership.features ? membership.features[key] : true);
return features;
})
);
}
【问题讨论】:
-
请提供可重现的例子
-
我添加了一个游乐场示例链接
-
这样不行。关于
U,请看这个答案stackoverflow.com/questions/69187022/…。有用吗? -
另一方面,对象的突变可能会导致您出现另一种类型的错误。请参阅我关于 TS 中的突变的文章catchts.com/mutations
-
见这个例子 tsplay.dev/mx51GW 。
U可能是Record<T, boolean>的任何允许子类型
标签: typescript