2014-02-20 73 views
1

我正在使用grunt-typescript,它正在編譯我所有的* .ts文件。我使用angular-mocks.d.ts和node.d.ts,但是我在我的實際ts文件中分別引用它們。我使用angular-mocks僅用於茉莉花測試,而我在我的server.ts文件中使用節點。
問題我所知道的是,儘管它們是分開引用的,但當它們在grunt-typescript中編譯時,它似乎會以某種方式將它們轉儲到一起,以使它們的兩個不同的「模塊」定義最終衝突。如果我使用tsc(它引用了node.d.ts)自己構建我的server.ts文件,它會很好地構建。這兩個應該永遠不會重合,所以對我來說不是真的衝突,除非它正在成爲一個grunt-typescript中的一個,它似乎在編譯時將所有* .d.ts文件一起轉儲。我認爲這是因爲它將所有的* .ts文件一起構建,因此最終將* .d.ts文件一起放入一個公共空間。在「module」全局變量上運行grunt-typescript時angular-mock和node.js發生衝突

的錯誤,我得到:

C:/node/bills/typings/node/node.d.ts(37,13): 錯誤TS2134:隨後的變量聲明必須具有相同的類型。變量'模塊'必須是類型'(...模塊:任何[])=>任何',但這裏有類型'{exports:any; require(id:string):any; id:string;文件名:字符串; loaded:boolean;父母:任何;兒童:任何[]; }」。

角mocks.d.ts 「模塊」 的定義:

declare var module: (...modules: any[]) => any; 

node.d.ts 「模塊」 的定義:

declare var module: { 
    exports: any; 
    require(id: string): any; 
    id: string; 
    filename: string; 
    loaded: boolean; 
    parent: any; 
    children: any[]; 
} 

回答

1

這結束了工作爲了我。我將我的測試.ts文件分割成單獨的打字稿。這導致它不會一起運行我的測試聲明和運行時聲明。通過分離,模塊環境聲明不再發生衝突。

typescript: { 
     options: 
     { 
      target: 'es5', //or es3 
      base_path: '', 
      sourcemap: true, 
      declaration: false 
     }, 
     server: { 
      src: ['*.ts'] 
     }, 
     test: { 
      src: ['test/*.ts'] 
     } 
    }, 

    watch: { 
     files: ['*.ts', 'test/*.ts'], 
     tasks: ['typescript:server', 'typescript:test'] 
    } 
1

這是一個已知的問題!

已取得了pull request/merge ..

解決方法是使用angular.mock.module而不是module

+0

不僅僅是一種解決方法! angular-mock的類型定義建議您始終使用'angular.mock.module'。 – user2954463