Ошибку TypeError: класс расширяет значение undefined-это не функция или null

Я получаю следующее сообщение об ошибке при попытке создания этих структур.

`Ошибку TypeError: класс расширяет значение undefined-это не функция или значение null

Я предполагаю, что это как-то связано с циклическими зависимостями, но как это должно было бы избежать при использовании таблицы наследования и один-ко-многим отношения?

Он жалуется на следующие JavaScript на BaseComic_1.BaseComic`.

давайте вариант = Вариант класс расширяет 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;
}
Решение

У меня был тот же вопрос. Оказывается, я был циркулярно импортировать классы, которые, видимо, ограничение. (См. Эти вопросы на GitHub: #20361, #4149, #10712)

Отметим, что кажется, что циклическая ссылка также ограничено между файлами, а не просто типов.

Видеть это Другой вариант ответа

Комментарии (7)

Как отметили в Томас Йенсен'с комментарием выше, циклические ссылки могут происходить не только в видах, но и в файлах. Я столкнулся с этой же проблемой, когда я экспортировал как базовых, так и производных типов из того же файла. Такие как:

Машинопись индекс//.ТС экспорт { класс } от "./база" - а; экспорт { DerivedClass } от "./производные и";

Это простая ловушка упасть в. Отправляю это здесь в надежде, что это'Лл спасти кого-то еще на время отладки.

Комментарии (2)

Просто столкнулся с этим вопросом и, ну, это странно. Я бегу проект

узла-требует ТС-узел/зарегистрировать путь/к индексу/.ТС

И этот сбой с выше сообщение об ошибке, даже после того, как я удалить циклические ссылки, как полагают принято отвечать.

Однако, если я запускаю ЦТП он компилирует нормально, а потом он нормально работает даже с--требуют ТС-узел/Регистрация...`.

Надеюсь, что это помогает кто-то.

Комментарии (0)