2017-02-22 13 views
11

Yüklü NodeJS paketlerimden biri için @type/{name} TypeScript tanımı bulamıyorum, bu yüzden bir d.ts dosyası yazmaya çalışıyorum Bunun için dosyayı {project root}\typings klasörüne koyun. Bu yapmak nasıl:Hata yaşıyorum "Modül adı" özel tip bir tanımlayıcı modülüne çözümleniyor ... "özel TypeScript tanım dosyası yazılırken

// My source code: index.ts 
import Helper from 'node-helper-lib'; 


// My definition: \typings\node-helper-lib.d.ts 
declare....(something else) 

declare module 'node-helper-lib' { 
    class Helper { ... } 
    export = Helper; 
} 

Ancak, Visual Studio Kod bu hatayı veren tutar ve declare module 'node-helper-lib' altında kırmızı çizgi koyar:

[ts] Geçersiz modül adı büyütme. 'Node-helper-lib' modülü, '{proje yolu} \ node_modules \ node-helper-lib \ index.js' adresindeki bir türlenmemiş modüle gider, bu da artırılamaz.

Kitaplık yazılmamış olduğu için yazı yazmayı eklemem gerekmiyor mu?

GÜNCELLEME:

kullanıyorum:

  • typescript: 2.1.4
  • Visual Studio Kodu: 1.9.1
  • Düğüm JS: 6.9.4
  • , Windows 10 x64

cevap

9

Bazı denemelerden ve hatalardan sonra, augmentation'un "aynı dosyada diğer modül bildirimleriyle birlikte bir modülün bildirilmesi" anlamına geldiğini buldum. biz türsüz 3-parti JavaScript kütüphanesi için tanım dosyası yazmak istiyorsanız

Bu nedenle, 'lib adı' tam kitaplık adı eşleşmesi gerektiğini dosyada SADECE BİR declare module 'lib-name' olması gerekir ve (bulunabilir onun package.json, "name" özelliği). 3. taraf kütüphane zaten dahil tanım dosyası.d.ts vardır ve biz onun işlevlerini genişletmek istiyorsanız Öte yandan

, o zaman yarattığımız başka dosyada ek tanımını koyabilirsiniz. Buna augmenting denir. Örneğin

:

// These module declarations are in same file, given that each of them already has their own definition file. 
declare module 'events' { 
    // Extended functionality 
} 

declare module 'querystring' { 
    // Extended functionality   
} 

declare module '...' { ... } 

Sadece durumda biri burada keşif terk aynı soruyu sahiptir. Ve bir şey özlediğimde lütfen beni düzeltin.

+0

Ne 3. taraf kütüphanesi zaten tanım dosyası .d.ts yer verdi, ama bunu görmezden ve özel bir birini kullanmak isterseniz yapmalıyım? –

+0

Emin değilim. Özel tanımlamaya işaret eden deneyin mi? – hirikarate

+16

Tamamen çözülmemiş bir npm modül için bir tanım dosyası yazmaya çalışıyorum, 'supertest' - TypeScript'in şikayeti bile mantıklı değil, bir deklarasyonu bile olmayan bir şeyi nasıl geliştiremiyorum? Ben defalarca özel tanım dosyaları yazmışım sanıyordum ... '[ts] Büyütmede geçersiz modül adı. Modül 'supertest', '/home/chase/Desktop/projects/formuoli/node_modules/supertest/index.js' adresinde, genişletilemeyen bir türlenmemiş modüle gider. '- maalesef @ tür/supertest, DOM dahil edilerek bozuldu kütüphaneler onu bozuyor .. sanki şanstan çıkmış gibiyim – ChaseMoskal

2

gerçek çözüm @ hirikarate yanıtında @Paleo tarafından bir açıklama verilmiştir:

İthalat modül beyanı içine beyan edilmelidir.

Örnek:

declare module 'node-helper-lib' { 
    import * as SomeThirdParty from 'node-helper-lib'; 
    interface Helper { 
     new(opt: SomeThirdParty.Options): SomeThirdParty.Type 
    } 
    export = Helper; 
} 
İlgili konular