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?
