2016-10-03 19 views
20

tsconfig.json'da types alanının anlamını anlamıyorum. Ben @types/express yüklerseniz anladığım kadarıylaTypescript 2.0. tsconfig.json içinde "types" alanı

 "types": { 
      "description": "Type declaration files to be included in compilation. Requires TypeScript version 2.0 or later.", 
      "type": "array", 
      "items": { 
      "type": "string" 
      } 
     }, 

Bildiğim kadarıyla, ben tsconfig.json

{ 
    "compilerOptions": { 
    ... 
    "types": ["lodash"] 
    } 
} 

böyle dize eklemek gerekir ama her şey onsuz çalışıyor: belgelerinde böyle metni okudum. Ben typescript 2. * 'tsconfig.json' itibariyle types alan

cevap

59

neden ihtiyaç Ve şimdi, anlamıyorum mevcut şu iki özelliği vardır:

{ 
    'typeRoots': [], 
    'types': [] 
} 

Ben olacak detay hem sırayla. (: 'Node_modules' örneğin)


  1. 'typeRoots' transpiler tipi tanımları için görünmelidir hangi kök klasörleri belirtir.

    • Eğer typescript kullanıyor idiyseniz

      , sen typescript kullanılarak yazılmıştır edilmemiştir farklı kütüphaneler için, genel değişkenler tanımak ve IntelliSense desteği derleyici için sırayla tanımları gerektiğini biliyoruz.

    • Bu sorun projelerinde böyle projeniz için gerekli typings indirmek için böyle tsd olarak veya typings modülü araçları kullanmak olduğunu 'DefinatelyTyped' olarak (repo) tarafından ele, ancak aynı zamanda birlikte gelir olmuştur ayrı tutulması gereken kendi 'json' dosyaları.

    • TS2 ile * artık tanım bağımlılıklarını 'npm' kullanarak alabilirsiniz. Bunun yerine veya typingstsd gibi ayrı cli kütüphanesini kullanmak yerine, artık sadece kullanabilirsiniz: npm i @types/{LIB} bu şekilde, bütün bağımlılıklar package.json kullanılarak yönetilir ve kolayca ortadan kaldırabilir projenizde devam etmek için başka bir 'json' dosyasının gerekliliği.


  1. 'türleri' typeRoot bulunacaktır gerçek kütüphane isimleridir.

    • o yüzden gibi bir şey olmazdı typeRoots için varsayılan yapılandırmayı var diyelim:

      "typeRoots": [ 
          "./node_modules/@types" 
      ] 
      
    • Diyelim ki var bu yüzden artık, projeniz için bir test çerçeve olarak yasemin kullanmak istediğiniz diyelim senin typeRoot klasör yapılandırılmış, tüm sahip çok şimdi yapmak yürütün: tanım paketi yüklendikten npm i @types/jasmine --save-dev

    • sonra sadece yo yapılandırmanız gerekir aşağıdaki gibi 'tsconfig.json' ur 'türleri' özelliği:

      typeRoots:

      "types": [ 
          "core-js", 
          "jasmine", 
          "requirejs", 
          "chance" 
      ] 
      

Sonuç olarak, temelde aşağıdaki TS derleyici söyleyin: Bu klasörlerdeki yazımlara bakmanız gerekiyor. types: Yukarıda belirtilen klasörlerden birinde, çerçeveler (alt klasörler) için tanımları bulacaksınız.

Yani yukarıdaki senaryoyu kullanarak ve biz başka kökü eklerseniz:

"typeRoots": [ 
    "./node_modules/@types", 
    "./custom_definitions" 
], 
"types": [ 
    "jasmine", 
] 
şimdi

./node_modules/@types/jasmine

veya

./custom_definitions/jasmine

tanım dosyaları arar

TS

Umarım bu yardımcı olur!

+0

Çok bilgilendirici, teşekkürler! Buna hala ts dosyalarının başında mı ihtiyacımız var? /// bedouger

+0

Eğer sistem türünü kullanmayı seçerseniz, hayır. Projelerimde şahsen daha fazla referansım yok. –

+0

Bunun neden ani ve sinon gibi bazı türler için işe yaramadığını biliyor musunuz? – Michael

12

Zorunlu olarak tür alanına ihtiyacınız yok. İşte documentation belirtmek önem parçasıdır: Varsayılan tüm görünür “@types” paketler ile

sizin derleme dahildir. Eğer kongre izledi ya da bu tür @types paketlerini indirmek için NPM gibi, sen typeRoots yapılandırmak gerekmez ayarlanmış bir takım kullanmış varsa kapsayan klasörünün ait node_modules paketler/@ tipleri,

Yani görünür kabul edilir veya türlerinde yapılandırmanızdaki varsayılan klasör yapısıyla çalışacaktır.