Automatically generate environmental module declarations

Given these 2 typescript files

api/Token.ts

 interface Token { code: string } export default Token 

and index.ts

 export * from './api/Token' 

tsc 1.5 using the --declarations switch will create two .d.ts files (with similar content)

api/Token.d.ts

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

and index.d.ts

 export * from './api/Token'; 

Running grunt-dts-bundle with the following options

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

will create an environment module declaration file my-module.d.ts with the following contents

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

However, this expression does not compile due to: Import or export declaration in an ambient module declaration cannot reference module through relative module name.

How can I automatically create an external module declaration for the two typescript files above?

EDIT

Please follow the latest updates https://github.com/Microsoft/TypeScript/issues/2262

+5
scripting module typescript
Jul 27 '15 at 13:27
source share
1 answer

I recently wrote a blog post about this. To summarize, you can use autodts if you replace index.ts with api.ts containing the following:

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

Make sure api.ts is in the same place as the api directory (next to, not inside it).

Then you need the package.json file:

 { "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" } } 

It is important that the api package name matches the api.ts file and api directory. This way, both Node.js and the TypeScript compiler will look in the same places when using your package.

Finally, you need the tsconfig.json file:

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

Now npm install compile your package and create the associated index.d.ts file defined in the definition setting in package.json .

To use your package, you can do something like:

 /// <reference path = "api/index.d.ts" /> import {Token} from 'api'; class foo { key: Token; } 

You can use the autodts link to update the reference path , check the blog post and / or automatically process documents for this.

The resulting index.d.ts contains:

 /// <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 and api.js are empty.

+3
Aug 18 '15 at 15:42
source share



All Articles