2017-04-03 13 views
5

これらのエンティティを作成しようとすると、次のエラーが発生します。TypeError:Class extends values undefinedが関数またはnullではありません

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

私は、これは循環依存関係とは何かを持っていると仮定していますが、どのようにすることをテーブル継承し、多くの関係1つを使用するときに回避されることになっていますか?

BaseComic_1.BaseComicで次のjavascriptについて不平を言います。ここで

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

循環参照は単に* types *でなく* files *の間にあるように見えることに注意してください。したがって、型参照が循環型でない場合でも、型が存在する.tsファイルに応じてこの問題が発生する可能性があります。 –

関連する問題