2017-01-30 12 views
5

this manual okuduktan sonra ve bu alıntı beyan` arasındaki fark nedir:namespace` beyan ve `module`

O typescript 1,5 olduğuna dikkat etmek önemlidir, adlandırma değişti. “Dahili modüller” artık “ad alanları”. Hem declare module ve declare namespace kullanıldığını görebilirsiniz node_modules\@types\node\index.d.ts keşfetmek “Dış modüller” artık sadece “modüller” dir

Ben ancak, declare module artık kullanılmamaktadır bir izlenimi ve declare namespace tarafından değiştirilmiştir:

declare namespace NodeJS { 
    export var Console: { 
     prototype: Console; 
     new(stdout: WritableStream, stderr?: WritableStream): Console; 
    } 
... 

declare module "buffer" { 
    export var INSPECT_MAX_BYTES: number; 
    var BuffType: typeof Buffer; 
    var SlowBuffType: typeof SlowBuffer; 
    export { BuffType as Buffer, SlowBuffType as SlowBuffer }; 
} 

Neden? Fark ne?

Dış modüller (ES6 modülleri) anladığım kadarıyla burada oynamak yok.

declare module "buffer" {} // with quotes 

ve

declare module buffer {} // without quotes 

(tırnak) eski dış modül (ES6 modülü) belirttiği ve şu anda .d.ts dosyalarında kullanılır:

+0

Yayında, bağlantıda bulunan iki paragraf için kısa bir tanım var. Temel olarak ad alanları, modül kalıbını uygulama biçimleridir. Modüller artık ES2015 modüllerine eşdeğerdir. Beyan kısmı, her ikisinin de var olması ve başka biri tarafından tanımlanması anlamına gelir. :) – toskv

+0

@toskv, evet, kesinlikle bağlandığım sayfayı okudum. Ama bu çok kafa karıştırıcı, bu yüzden burada –

+0

@toskv sorusunu yayınladım, doğru cevabı aldım, lütfen [yanıtım] (http://stackoverflow.com/a/42030656/2545680) –

cevap

3

TS modülleri belirterek iki yolu vardır Bir dosyaya birkaç ES6 modülü koyun:

declare module "buffer" {} 
declare module "fs" {} 

İkincisi (wi thout tırnak) bu alıntıda, ad olarak kullanılmıştır ve şimdi

Yani
declare namespace buffer {} 

ile değiştirilmiştir:

O typescript 1,5 olduğuna dikkat etmek önemlidir, adlandırma değişti. “Dahili modüller” artık “ad alanları”. 1.5'lik önce kullanılmış gibi “Dış modüller” basitçe artık “modüller”

"İç modüller" dir tırnaklar olmadan modüllerdir. Ayrıntılı bilgi için bkz. this issue.

+1

, "declare namespace xxx {}" ne zaman kullanılmalı? – novaline

+0

@novaline, bu [https://www.typescriptlang.org/docs/handbook/namespaces.html] kontrol edin. Ad alanları esas olarak JS'de bir 'Revealing Module Pattern'. Daha fazla bilgi için ayrı bir soru sorabilir ve buraya başvurabilirsiniz. –

+1

Resmi belgeyi okudum, ancak doktor açık bir şekilde açıklamıyor. 'Xxx' decde modülü '{} 'nin kullanıldığının farkındayım.Ancak, ne zaman kullanacağını bilmiyorum, isim alanı xxx {}, ve "es6 modülü sistemi" ile global 'script' etiketi arasındaki ilişki nedir? – novaline