Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

original lib:

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

definition file:

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

typescript program which 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.

here is also already answered question but it doesn't work with typescript 2.0

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

like image 205
Aleksandar Djindjic Avatar asked Jan 27 '17 10:01

Aleksandar Djindjic


1 Answers

I found the 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;

so mu definition file should be:

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

and import with require:

//main.ts
import func = require('./commonjs-export-function');
like image 166
Aleksandar Djindjic Avatar answered Sep 22 '22 14:09

Aleksandar Djindjic