从角度6的命名空间中导出的枚举会导致运行时错误

时间:2019-05-16 00:58:15

标签: angular typescript enums namespaces

为什么从角度导出枚举会导致运行时错误? Intellisense可以正常工作,但是在运行时,无论我使用导出枚举的位置如何,它都无法找到名称空间。但是它适用于从命名空间导出的接口。

检查此堆叠闪电战https://stackblitz.com/edit/angular-enum-within-namespace

我已经从 User 名称空间(文件:user.ts)导出了两个实体

declare namespace User {
    export enum eUserType {
        Driver = 1,
        Passenger = 2,
        User = 3
    }

    export interface Profile {
        firstName: string;
        lastName: string;
    }
}

当尝试在AppComponent中使用它时(文件:app.component.ts)

import { Component } from '@angular/core';

@Component({
    selector: 'my-app',
    templateUrl: './app.component.html',
    styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
    constructor() {
    this.displayUser();

    // uncommenting following piece of code is causing an error ... 
    // ==> this.displayUserType();
    }

    displayUserType() {
        const newVariable = User.eUserType.Driver;
        console.log(newVariable);
    }

    displayUser() {
        const profile = <User.Profile> {
            firstName: "John",
            lastName: "Doe"
        };
        console.log("profile:", profile);
    }
}

取消注释 this.displayUserType()函数时,您会在控制台 未定义用户

中看到错误

1 个答案:

答案 0 :(得分:0)

您可以将名称空间声明更改为export namespace User {...}而不是declare namespace User {...},然后将其导入模块中,如下所示:

import { User } from './user'

这是您的Stackblitz的修改示例