2015-10-13 66 views
0

我想簡單地使用其他commonjs模塊的類型(接口)。我想知道是否有辦法做到這一點,而不必每次只需要類型(沒有實現)導入模塊?使用TypeScript從Visual Studio中的其他commonjs模塊使用類型(接口),而無需導入該模塊?

也是同樣的觀點。如何在不使用「--module commonjs」編譯的情況下在項目中使用commonjs聲明的模塊類型? (只是使用類型,我知道如果你不關心類型安全,你可以做var x = require('x')),但是這打破了TypeScript的目的)

這似乎是一個有效的用例,因爲人們可能希望創建一個沒有實際實現的庫......但是正如我目前所看到的那樣,即使我不需要它並且已經有了定義文件,您也必須在實際實現中使用import x = require('x')

有沒有辦法告訴編譯器它「存在」,類似於declare如何處理變量?

例子:

假設我有我不與任何模塊設置(無)編譯file.ts:

/// <reference path="ExternalCommonJSModule.d.ts" /> 

export class A { 

    public foo(bar: ITypeFromExternalCommonJSModule): number { 
     return bar.x * 2; 
    } 

} 

,並假設ExternalCommonJSModule.d.ts看起來是這樣的:

declare module "ExternalCommonJSModule" { 

    export interface ITypeFromExternalCommonJSModule { 
      x: number; 
    } 

} 

(注意,這個不是編譯,因爲file.ts不是用--module commonjs編譯的,它不會導入實現在.d.ts的N)

回答

0

我想知道是否有辦法做到這一點,而不必每次我只需要在類型(不執行)

您導入模塊可以將接口放入全局模塊中,例如globals.d.ts然後你就可以在整個項目中使用它們而不需要導入。

注:只要你全球您正在嚴重地限制了你的代碼的可共享性打開自己的鑽石版本依賴問題

+0

正如你的gitbook所說,有時可以使用全局可用的類型。使用全局類型的項目並不意味着在外部使用,而是一個非常具體的服務器實現。謝謝。 – user3667122

+0

typescript如何找到'globals.d.ts'模塊?這個名字是否以某種方式重要? –