typescript - 类型“布尔”不能分配给类型“U[T]”
问题描述
我不知道为什么打字稿给我这个错误:
这是相关代码:
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;
})
);
}
解决方案
像这样的东西怎么样......请注意,我重构了 for 循环。
// I did create this types for simulating your types
type Membership = { features : string[] }
type Observable<T> = any
function of<T>(someValue : T) : Observable<T>{}
interface MembershipFeatures { key1: string; key2: string; }
// My solution
type FoundRecord<T extends keyof MembershipFeatures> = { [key in T] : boolean}
// Function...
function getFeaturesFromMembership$<SelectedKey extends keyof MembershipFeatures>(
membership$: Observable<Membership>,
featureKeys: SelectedKey[],
isPreview$: Observable<boolean> = of(false)
): Observable<FoundRecord<SelectedKey>> {
return combineLatest([membership$, isPreview$])
.pipe(
map(([membership, isPreview]) => {
const features: FoundRecord<SelectedKey> = {} as FoundRecord<SelectedKey>;
for (const key of featureKeys) {
if (!membership || isPreview) {
features[key] = true;
} else {
features[key] = false;
features[key] = key in membership.features ? membership.features[key] : true
}
}
return features;
})
);
}
推荐阅读
- docker - 使用 amazon-ecr-credential-helper 时“没有基本身份验证凭据”
- docker - Docker 是否在每个容器上复制只读目录?
- signalr - SignalR:集线器与组
- php - 如何在多级菜单侧边栏 PHP 中添加新菜单?
- java - 从 Python 服务器使用 AsyncTask 进行 JSON 检索正在返回“字符 0 处的输入结束”
- firebase - 谷歌云函数 onFinalize() 上下文
- python - 如何使用 python 将 .txt 文件集成到此代码中?
- android - 如何从摘要生成 PKCS#7 签名?
- python - Django - 过滤 prefetch_related 查询集
- flutter - “如何使用 Flutter 以最简单的方式调用带有登录凭据(如用户名和密码)的 post api”