How to write a definition file for a commonjs module that exports a function

I want to use simple commonjs module in typescript and here are 3 files

original library:

//commonjs-export-function.js module.exports = function() { return 'func'; }; 

definition file:

 //commonjs-export-function.d.ts declare function func(): string; export = func; 

typescript that use it:

 //main.ts import { func } from './commonjs-function'; console.log(func()); 

When I run tsc, I get this error:

 tsc main.ts && node main.js main.ts(1,22): error TS2497: Module '"/Users/aleksandar/projects/typescript-playground/commonjs-function"' resolves to a non-module entity and cannot be imported using this construct. 

a question has already been answered here too, but it does not work with typescript 2.0

How to write a typescript definition file for a node module that exports a function?

+2
commonjs typescript typescript-typings
source share
1 answer

I found a solution in typescript docs here: http://www.typescriptlang.org/docs/handbook/declaration-files/templates/module-function-d-ts.html

 *~ Note that ES6 modules cannot directly export callable functions. *~ This file should be imported using the CommonJS-style: *~ import x = require('someLibrary'); ... export = MyFunction; declare function MyFunction(): string; 

therefore, the mu definition file should be:

 //commonjs-export-function.d.ts declare function func(): string; export = func; 

and import with the requirement:

 //main.ts import func = require('./commonjs-export-function'); 
+4
source share

All Articles