如何使用systemjs和Angular2导出typescript枚举?

3

我正在尝试使用Angular2、system.js和typescript。到目前为止,我导出的接口一切正常,但是一旦我尝试导入一个枚举类型,就会出现问题。在下面的代码中,Card没有问题,但是当我导入Legend时,就会出现错误:GET http://localhost:3000/shared/legend 404 (Not Found)

import {Component, OnInit} from 'angular2/core';
import {CardService} from './card.service';
import {Card} from '../../shared/card';
import {Legend} from '../../shared/legend';

@Component({
    selector: 'cards-list',
    templateUrl: 'app/cards-list.html',
    providers: [CardService]
})
export class CardsListComponent implements OnInit {
    public cards:Card[];

    //using Legend is the problem!
    public legendValues:String[] = [Legend[Legend.ARIANE]];

    constructor(private _cardService:CardService) {
    }
    getCards() {
        this._cardService.getCards(cards => this.cards = cards);
    }
    ngOnInit() {
        this.getCards();
    }
}

这是传说文件:

export enum Legend {
    THE_RAPTOR,
    LINZA,
    ARIANE,
    OZAN
}

为什么我不能导入普通枚举?

3个回答

3
它一直在为我导出接口正常工作,但只要我尝试导入枚举,它就会爆炸。 接口是一个仅存在于编译时的结构,因此没有运行时的影响。带有接口的文件在运行时不会加载。然而,带有类、变量和枚举等运行时内容的文件将在运行时加载,你将在这些内容上获得404错误。这是一个服务器设置错误。你需要允许加载这些JS文件。

谢谢你的建议。我认为我还有一个额外的问题,就是我的TypeScript目标是ES5,据我所知它不支持枚举类型,但这完全是另一个问题! - CorayThan

2

我曾经也遇到过类似的问题,最终通过在我的枚举之前导出一个“虚拟”类来解决它...

`

export class L{};

export enum Legend { THE_RAPTOR, LINZA, ARIANE, OZAN }

...

import {L, Legend} from '../../shared/legend'; `

不幸的是,我不能说为什么这是必要的(尽管我看到有人说没有类的枚举是不允许的,但为什么呢?!),但这帮助了我。


0
在下面的代码中,我将演示如何导出包含常量列表的类(constClass),以便在您的类服务中使用。

-serviceAngularClass.js-

    ...
    import {WsRessources} from "./constClass";

            @Injectable()
            export class PersonneService {...

        public functionName():Observable<any>{
            return this.updateRessource(WsRessources.BasePath+WsRessources.affectLeavingDate...);


        }
}//end Class  

-constClass.js-

    export class WsRessources {
        public static BasePath='personnes';
        public static affectLeavingDate='/affectLeavingDate';
     }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接