typescript - typeorm - Type ' {Entity} ' kan ikke tilordnes til typen ' QueryDeepPartialEntity<{Entity}>'


Jeg har noen vanskeligheter med å skrive typeorm-enheter for en del av en eksisterende database. Denne delen ser slik ut:

Kort sagt: det finnes en Brand-tabell, en merkevare kan ha flere produkter, systemet prøver å finne par av produkter fra forskjellige merker. Disse parene lagres i Comparison-tabellen som har merkevare- og produkt-IDer for hver side av sammenligningen. I tillegg er det en XTable involvert, en merkevare kan ha flere X-er, og Products og X har en mange-til-mange-relasjon.

Jeg prøver å skrive enhetene slik (bare relasjonene):

@Entity('Brands')
class Brand {
    @OneToMany(() => XTable, (x) => x.brand)
    xs: XTable[];

    @OneToMany(() => Product, (product) => product.brand)
    products: Product[];

    @OneToMany(() => Comparisons, (comparison) => comparison.sideABrands)
    sideAComparisons: Comparison[];

    @OneToMany(() => Comparisons, (comparison) => comparison.sideBBrands)
    sideBComparisons: Comparison[];
}

@Entity('Comparisons')
class Comparison {
    @ManyToOne(() => Brand, (brand) => brand.sideAComparisons)
    @JoinColumn({ name: 'SideABrandId', referencedColumnName: 'Id' })
    sideABrand: Brand;

    @ManyToOne(() => Product, (product) => product.sideAComparisons)
    @JoinColumn({ name: 'SideAProductId', referencedColumnName: 'Id' })
    sideAProduct: Product;

    @ManyToOne(() => Brand, (brand) => product.sideBComparisons)
    @JoinColumn({ name: 'SideBBrandId', referencedColumnName: 'Id' })
    sideBBrand: Brand;

    @ManyToOne(() => Product, (product) => product.sideBComparisons)
    @JoinColumn({ name: 'SideBProductId', referencedColumnName: 'Id' })
    sideBProduct: Product;
}

@Entity('Products')
class Product {
    @ManyToMany(() => XTable, (x) => x.products)
    @JoinTable({
        name: 'Products_XTable',
        joinColumn: { name: 'ProductId' },
        inverseJoinColumn: { name: 'XTableId' },
    })
    xs: XTable[];

    @ManyToOne(() => Brand, (brand) => brand.products)
    @JoinColumn({ name: 'BrandId', referencedColumnName: 'Id' })
    brand: Brand;

    @OneToMany(() => Comparison, (comparison) => comparison.sideAProduct)
    sideAComparisons: Comparison[];

    @OneToMany(() => Comparison, (comparison) => comparison.sideBProduct)
    sideBComparisons: Comparison[];
}

@Entity('XTable')
class XTable {
    @ManyToOne(() => Brand, (brand) => brand.xs)
    @JoinColumn({ name: 'BrandId', referencedColumnName: 'Id' })
    brand: Brand;

    @ManyToMany(() => Product, (product) => product.xs)
    @JoinTable({
        name: 'Products_XTable',
        joinColumn: { name: 'XTableId' },
        inverseJoinColumn: { name: 'ProductId' },
    })
    products: Product[];
}

Når jeg prøver å sette inn en post i Comparison-tabellen, bare ved å gjøre

getRepository(Comparison).insert(...)

Jeg får en feil som:

Argument of type 'Comparison' is not assignable to parameter of type 'QueryDeepPartialEntity<Comparison> | QueryDeepPartialEntity<Comparison>[]'.
  Type 'Comparison' is not assignable to type 'QueryDeepPartialEntity<Comparison>'.
    Types of property 'sideAProduct' are incompatible.
      Type 'Product' is not assignable to type '(() => string) | QueryDeepPartialEntity<Product> | undefined'.
        Type 'Product' is not assignable to type 'QueryDeepPartialEntity<Product>'.
          Types of property 'xs' are incompatible.
            Type 'XTable[]' is not assignable to type '(() => string) | QueryDeepPartialEntity<XTable>[] | undefined'.
              Type 'XTable[]' is not assignable to type 'QueryDeepPartialEntity<XTable>[]'.
                Type 'XTable' is not assignable to type 'QueryDeepPartialEntity<XTable>'.
                  Types of property 'products' are incompatible.
                    Type 'Product[]' is not assignable to type '(() => string) | QueryDeepPartialEntity<Product>[] | undefined'.ts(2345)

Jeg kan ikke finne ut hvor feilen er fordi relasjonene ser fine ut for meg, hvis jeg kaster argumentet som jeg sender inn i insert-funksjonen som any fungerer det.

Et annet spørsmål: ser disse tabellene normaliserte ut?

Relaterte artikler