2017-04-03 91 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文件。 –

相关问题