2015-07-27 28 views
5

(Benzer içerikli) 0 dosyaotomatik olarak üretilmesi ortam modülü bildirimleri

api/Token.d.ts

interface Token { 
    code: string; 
} 
export default Token; 

ve aşağıdaki seçeneklerle hırıltı-dts-demet Running index.d.ts

export * from './api/Token'; 

dts_bundle: { 
     release: { 
      options: { 
       name: 'my-module', 
       main: 'index.d.ts' 
      } 
     } 
    } 

declare module 'my-module' { 
    export * from './api/Token'; 
} 

Ancak bu beyan derleme değil aşağıdaki içeriğe sahip bir ortam modülü beyan dosyası my-module.d.ts üretecektir dolayı: Import or export declaration in an ambient module declaration cannot reference module through relative module name.

otomatik olarak iki ortam modülü beyanı oluşturmak nasıl Yukarıdaki yazı dosyaları? https://github.com/Microsoft/TypeScript/issues/2262

cevap

3

üzerinde

DÜZENLEME

takip edin en son güncellemeleri Geçenlerde bu konuda bir blog post yazdım. Aşağıdaki içeren api.ts ile index.ts değiştirirseniz Özetlemek gerekirse, sen autodts kullanabilirsiniz:

export {default as Token} from './api/Token'; 

(değil içine, yanına) emin api.ts api dizini olarak aynı yerde olduğundan emin olun.

{ 
    "name": "api", 
    "version": "1.0.0", 
    "main": "dist/api.js", 
    "scripts": { 
    "preinstall": "npm install autodts", 
    "postinstall": "autodts link", 
    "prepublish": "tsc && autodts generate" 
    }, 
    "typescript": { 
    "definition": "index.d.ts" 
    }, 
    "dependencies": { 
    "autodts": "~0.0.4" 
    }, 
    "devDependencies": { 
    "@lib/autodts-generator": "~0.0.1", 
    "typescript": "~1.5.3" 
    } 
} 

Bu paket adı api dosyayı api.ts ve dizini api eşleşmesi önemlidir:

Sonra bir package.json dosyasına ihtiyacım var. Bu şekilde hem Node.js hem de TypeScript derleyicisi paketinizi kullanırken aynı yerlere bakacaktır.

{ 
    "compilerOptions": { 
     "declaration": true, 
     "module": "CommonJS", 
     "target": "es5", 
     "outDir": "dist" 
    }, 
    "files": [ 
     "api.ts" 
    ] 
} 

Şimdi npm install paketinizi derlemek ve package.json yılında definition ortamda tanımlanan bir paket index.d.ts dosyası üretecektir:

Son olarak, bir tsconfig.json dosyasına ihtiyacım var.

paket kullanmak için, böyle bir şey yapabilirsiniz: Sen bugüne kadar reference path tutmak için autodts link kullanabilirsiniz

/// <reference path = "api/index.d.ts" /> 

import {Token} from 'api'; 

class foo { 
    key: Token; 
} 

, bunun için blog yayınına ve/veya autodts docs kontrol edin.

elde edilen index.d.ts içerir:

/// <reference path="index.ref.d.ts" /> 
declare module 'api/Token' { 
    interface Token { 
     code: string; 
    } 
    export default Token; 

} 
declare module 'api' { 
    export { default as Token } from 'api/Token'; 

} 

index.ref.d.ts ve api.js boştur.

+0

Geç cevap için ayrıntılı bir cevap ve özürlerim için teşekkür ederim, anlaşmayı tamamen değiştiren TypeScript 1.6'yı test etmeyi bekliyordum. Çözümünüz, TypeScript <1.6 için gitmenin yoludur. TypeScript 1.6 için, bu GitHub sorununda bazı ayrıntılar vardır: https://github.com/Microsoft/TypeScript/issues/247 –

+0

@BrunoGrieder https://github.com/Microsoft/TypeScript/wiki/Typings-for-npm -paketler gerçekten belirsizdir. Github sorunları hakkındaki yorumların sayfalarını okuyorum, ancak bu gerçekten basit soruya cevap bulamıyorum. Typecript> 1.6 ile, örneğin, "inversify" modülünü (yazılan) kullanan bir kütüphane yazmak ve sonra da kütüphanenin dışında tersini kullanmak istediğinizde. Bunu nasıl başarırsın? – David

+0

@David Hiçbir zaman inversify kullanmamıştım ama bir boilerplate kütüphanesi bulabilirsin [here] (http://github.com/wadahiro/typescript-library-boilerplate) ve yazdığım bazı detaylar [orada] (http://stackoverflow.com)/questions/34221594/best-way-to-share-a-jds-nesne-arasında-typescript-frontend-ve-nodejs-backend/34225037 # 34225037) ve aşağıya yakın benzer [orada] (http://stackoverflow.com/questions/35582275/using-an-external-typescript-library-within-a-typescript-internal-module/35588095#35588095) –

İlgili konular