ModelProperty<M, T, G>: T extends AbstractField<any>
    ? M[ModelFieldKey<M, G>] & AbstractField<any>
    : T extends ModelCollection<any>
        ? M[ModelFieldCollectionKey<M, G>] & ModelCollection<any>
        : T extends AbstractModel
            ? M[ModelFieldModelKey<M, G>] & AbstractModel
            : never

Type Parameters