2017-04-03 7 views
5

Ich bekomme den folgenden Fehler beim Versuch, diese Entitäten zu erstellen.TypeError: Klasse erweitert Wert undefined ist keine Funktion oder null

TypeError: Class extends value undefined is not a function or null

Ich gehe davon aus dem etwas mit zirkulären Abhängigkeiten zu tun hat, aber wie soll das denn vermeiden, wenn die Tabelle Vererbung und eine zu viele Beziehungen mit?

Es beschwert sich über das folgende Javascript bei BaseComic_1.BaseComic.

let Variant = class Variant extends BaseComic_1.BaseComic {

Dies ist die komplette Datei.

"use strict"; 
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 
    return c > 3 && r && Object.defineProperty(target, key, r), r; 
}; 
var __metadata = (this && this.__metadata) || function (k, v) { 
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 
}; 
Object.defineProperty(exports, "__esModule", { value: true }); 
const typeorm_1 = require("typeorm"); 
const Comic_1 = require("./Comic"); 
const BaseComic_1 = require("./BaseComic"); 
let Variant = class Variant extends BaseComic_1.BaseComic { 
}; 
__decorate([ 
    typeorm_1.ManyToOne(type => Comic_1.Comic, comic => comic.variants), 
    __metadata("design:type", Comic_1.Comic) 
], Variant.prototype, "comic", void 0); 
Variant = __decorate([ 
    typeorm_1.ClassEntityChild() 
], Variant); 
exports.Variant = Variant; 
//# sourceMappingURL=Variant.js.map 

import {Entity, Column, PrimaryGeneratedColumn, OneToMany} from "typeorm"; 
import {Comic} from "./Comic"; 

@Entity() 
export class Series { 

    @PrimaryGeneratedColumn() 
    public id: number; 

    @Column("text", { 
     length: 30 
    }) 
    public copyright: string; 

    @Column("text", { 
     length: 100 
    }) 
    public attributionText: string; 

    @Column("text", { 
     length: 150 
    }) 
    public attributionHTML: string; 

    @Column("text", { 
     length: 50 
    }) 
    public etag: string; 

    @Column("text", { 
     length: 200 
    }) 
    public title: string; 

    @Column("text") 
    public description: string; 

    @Column("number", { 
     length: 4 
    }) 
    public startYear: number; 

    @Column("number", { 
     length: 4 
    }) 
    public endYear: number; 

    @Column("text", { 
     length: 20 
    }) 
    public rating: string; 

    @Column("text", { 
     length: 20 
    }) 
    public type: string; 

    @Column("text") 
    public thumbnail: string; 

    @OneToMany(type => Comic, comic => comic.series) 
    public comics: Array<Comic>; 
} 

import {Entity, TableInheritance, PrimaryGeneratedColumn, Column, ManyToOne, DiscriminatorColumn} from "typeorm"; 
import {Series} from "./Series"; 

@Entity() 
@TableInheritance("class-table") 
@DiscriminatorColumn({ name: "type", type: "string"}) 
export class BaseComic { 

    @PrimaryGeneratedColumn() 
    public id: number; 

    @Column("text", { 
     length: 30 
    }) 
    public copyright: string; 

    @Column("text", { 
     length: 100 
    }) 
    public attributionText: string; 

    @Column("text", { 
     length: 150 
    }) 
    public attributionHTML: string; 

    @Column("text", { 
     length: 50 
    }) 
    public etag: string; 

    @Column("text", { 
     length: 200 
    }) 
    public title: string; 

    @Column("int") 
    public issue: number; 

    @Column("text") 
    public variantDescription: string; 

    @Column("boolean") 
    public variant: boolean; 

    @Column("text") 
    public description: string; 

    @Column("int") 
    public pageCount: number; 

    @Column("date") 
    public onSaleDate: Date; 

    @Column("date") 
    public unlimitedDate: Date; 

    @Column("text") 
    public thumbnail: string; 

    @ManyToOne(type => Series, series => series.comics) 
    public series: Series; 
} 

import {OneToMany, ClassEntityChild} from "typeorm"; 
import {Variant} from "./Variant"; 
import {BaseComic} from "./BaseComic"; 

@ClassEntityChild() 
export class Comic extends BaseComic { 

    @OneToMany(type => Variant, variant => variant.comic) 
    public variants: Variant[]; 
} 

import {ManyToOne, ClassEntityChild} from "typeorm"; 
import {Comic} from "./Comic"; 
import {BaseComic} from "./BaseComic"; 

@ClassEntityChild() 
export class Variant extends BaseComic { 

    @ManyToOne(type => Comic, comic => comic.variants) 
    public comic: Comic; 
} 

Antwort

11

ich das gleiche Problem hatte. Es stellte sich heraus, dass ich zirkulär Klassen importierte, was anscheinend eine Einschränkung ist.

Siehe this andere Antwort

+1

ich mit browserify einen Kreis Import Problem hatte. Es war inkonsistent und seltsam - das Ändern der Datei oder das Kommentieren und Entfernen von Dingen und das erneute Ausführen würden es manchmal zum Verschwinden bringen. Trickreich. – user1978019

+1

Beachten Sie, dass der Zirkelverweis zwischen * Dateien * und nicht einfach * Typen * liegt. Selbst wenn Ihre Typreferenzen nicht zirkulär sind, können Sie dieses Problem immer noch haben, abhängig von den .ts-Dateien, in denen sich Ihre Typen befinden. –

Verwandte Themen