17

I would like to :

  • Import a js file that defines a class: ./myClass/index.js
  • Declare the public methods of MyClass somewhere (in index.ts or a specified declaration file, I really don't know how to do it)
  • Have a typescript file that exposes the class: index.ts

something like

// index.ts
import MyClass from './myClass' // or require, or anything that would work
export {MyClass}

and

// myClass/index.js
export default class MyClass {
  ...
}

This obviously does not work, as the import of ./myClass/index won't find the module.

The thing is, I tried to create a ./myClass/index.d.ts file based on this example, but no matter what, I still have a Error: Cannot find module './myClass/index.js' error at runtime :(

I feel like I miss some typescript basics here but I'm striving to find some clear resources.

Any ideas ?

2 Answers 2

24

There is no export default class in JavaScript. What you can do is write your JS file like this. myClass/index.js

"use strict";
class MyClass {
  hello(name) {
    console.log(`Hello ${name}`);
  }

}
exports.default = MyClass;

Create a Type definitions for it. myClass/index.d.ts

export default class MyClass {
  hello(name: string): void;
}

You can then import it into your TypeScript like this.

/// <reference path="./myClass/index.d.ts" />
import MyClass from "./myClass";

const my = new MyClass();
my.hello("Stack Overflow");
Sign up to request clarification or add additional context in comments.

2 Comments

Can't believe it was that simple 0_o. Thanks a lot !
@goenning why do you say there is not export default class ? developer.mozilla.org/en-US/docs/web/javascript/reference/… . I think that statement may confuse people
8

at the end of the your javascript file , write this

exports.MyClass = MyClass;

in ts files

import * as  IzendaSynergy  from './izenda/izenda_ui.js';

or

import { IzendaSynergy } from './izenda/izenda_ui.js';

in tsconfig.json file

  "allowJs": true

1 Comment

Me I don't use exports.MyClass = MyClass but export default class MyClass with the "allowJs": true

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.