2017-04-03 61 views
5

嘗試創建這些實體時出現以下錯誤。TypeError:Class extends value undefined不是函數或null

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

我假定這事做循環依賴,但怎麼是,應該使用表繼承和一對多的關係時,要避免?

它抱怨下面的JavaScript在BaseComic_1.BaseComic

let Variant = class Variant extends BaseComic_1.BaseComic {

下面是完整的文件。

"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; 
} 

回答

11

我有同樣的問題。原來我是循環導入類,這顯然是一個限制。

請參閱this其他答案

+1

我對browserify有一個循環導入問題。這是不一致和奇怪的 - 修改文件或評論和刪除的東西,重新運行有時會使它消失。棘手。 – user1978019

+1

請注意,循環引用似乎在*文件*之間,而不是簡單*類型*。所以即使你的類型引用不是循環的,你仍然可能會遇到這個問題,這取決於你的類型所在的.ts文件。 –

相關問題