【发布时间】:2021-06-23 23:45:41
【问题描述】:
我正在尝试在 TypeScript 中构建一个微型 ORM,但我遇到了这个编译问题:
Type 'TObject' does not satisfy the constraint '{ [k in k]: object; }'.
Type 'object' is not assignable to type '{ [k in k]: object; }'.
有人知道为什么这个代码示例会引发编译错误吗?以及如何解决?
type NavigationProperties<T, TKey extends keyof T> = T[TKey] extends object ? TKey : never;
type Relationship<T extends { [k in TMember]: TTarget }, TMember extends keyof T, TTarget extends object = object> = {
name: TMember,
isComposite?: boolean,
};
class A<TObject extends object>
{
public readonly relationships: Partial<{ [k in NavigationProperties<TObject, keyof TObject>]: Relationship<TObject, k> }> = { }
}
编辑
根据 Shivam 的要求,我正在为其添加更多上下文:当我有混合类型或不匹配的类型时,我也想让它工作: Playground
【问题讨论】:
-
也发布错误信息
-
NavigationProperties解析为never如果T的任何键不扩展object。是故意的吗? -
是的,如果我的类型不包含任何关系/导航属性,这是故意的。
标签: typescript typescript-generics mapped-types