界面无法在角度2模块中导出?

时间:2017-02-19 20:24:44

标签: angular typescript

我尝试在NgModule声明中导出接口并导出并在编辑器中获取此错误(Visual Studio代码):[ts] 'MyInterface' only refers to a type, but is being used as a value here.

以下是示例代码 Edit-1

import { NgModule }           from '@angular/core';
import { CommonModule }       from '@angular/common';
import { FormsModule }        from '@angular/forms';
import { MaterialModule }     from '@angular/material';
import { MyInterface }        from './my.interface';
import { MyService }          from './my.service';

@NgModule({
  imports:      [ CommonModule, FormsModule,  MaterialModule.forRoot()  ],
  declarations: [ MyInterface],//<- this is causing the message
  exports:      [ MyInterface],
  providers:    [ MyService ]
})
export class MyModule { }

我发现in the answer to this post的一部分解释:“因为接口在运行时在TypeScript中被擦除”。 我目前正在将我的应用程序重构为功能模块,因此我现在无法对其进行测试:我是否可以仅通过从'./mypathto/my.interface'导入来使用这些接口?

2 个答案:

答案 0 :(得分:29)

您无法导出界面。您只能导出:

  1. 其他模块
  2. 部件
  3. 指令
  4. NgModule是一个角度概念,不应与打字稿模块混淆。要使使用您的模块的第三方能够使用您的界面,您应该使用您的模块创建.d.ts定义文件。

    如果你想在你的另一个NgModule中使用一个接口,你应该使用:

    import {InterfaceName} from 'path/to/ngmodule/to/interface';
    

    另外,不要在声明数组中放置接口,这仅用于管道/组件/指令。

    如果您希望自己的界面可以在图书馆外使用,则应将其添加到导出index.ts

    export {InterfaceName} from 'path/to/ngmodule/to/interface';
    

答案 1 :(得分:7)

实际上你可以导出一个界面,但不是你想要的方式。

首先输入

生成interfaces.ts文件

ng g interface <interface_name>

接口文件示例:

export interface Auction{ $key?:string; $auctioneer:string;  ... }
export interface Item{ $key?:string; condition?:string; description?:string; ...}
export interface Bid{  $key?:string;  amount:number;  auction:string; ...}

根据需要修改文件后,您只能导入一个,所有或选择的界面:

import { Auction } from './interfaces';

import * as interfaces from './interfaces'; 
// then you have to call interfaces.Auction

如果有机会你知道如何在全球范围内共享接口。请告诉我:Angular how to share interfaces across the app