我正在尝试创建通用类型为ST
的子类型(I
),以强制该子类型(ST
)是一个对象,其中包含来自该I
具有特定类型DocumentReference
的泛型。
示例:
type SubType<Base, Condition> = Pick<
Base,
{ [Key in keyof Base]: Base[Key] extends Condition ? Key : never }[keyof Base]
>;
private joinOnField<
I,
J,
K extends keyof ST,
ST = SubType<I, DocumentReference>
>(data: ST, docRefField: K): Observable<J> {
if (!data[docRefField]) {
return of(null);
}
if ((<DocumentReference>data[docRefField]).get) {
return of(null);
}
return from(data[docRefField].get().then(snap => snap.data() as J));
}
我一直说错了
将“ ST [K]”类型转换为“ DocumentReference”类型可能是 错误,因为任何一种类型都不能与另一种类型充分重叠。如果 这是有意的,请先将表达式转换为“未知”。
我以为我很明确地表示ST仅具有DocumentReference
类型的字段
感谢您的帮助!
答案 0 :(得分:0)
只要条件类型仍然具有未解析的类型参数(例如,在泛型函数内部),编译器就无法遵循这些条件。
您应遵循编译器的建议,并使用双重声明data[docRefField] as unknown as DocumentReference