1

I am migrating a JavaScript project to TypeScript. The existing JavaScript uses requirejs for module loading, and I would like to do the same in TypeScript.

I have one module that is throwing "cannot find module" errors from its import statements when I compile. I have the correct <reference/> tags, and the references modules will work at runtime as expected. However, I would like to get these erroneous compiler errors out of my Error List window.

Here is the basic file structure of this module and its references:

root/
    helper.ts
    ui/
       uiModule.ts //This module is throwing the error
       panels/
           panel1.ts //The import of this module throws the error

The top of uiModule looks like this:

///<reference path="../helper.ts"/>
///<reference path="panels/panel1.ts"/>

import helper = require("Helper");
import panel1 = require("Panel1");

All of the modules are setup as single classes, like this:

//references and imports...
class MyClass {
    //Methods...
}

export = MyClass;

All filenames and import aliases start with lowercase; all class names start with uppercase.

The "cannot find module" errors seem to only be happening when one module references another in a deeper folder. If I change the import statement to `require("Panels/panel1"), the compiler error goes away, but it fails at runtime.

How can I correctly make this error stop showing up? I have a config file for requirejs. Can I point the language service to that file to resolve module references? I would really like to decouple references from file paths at design time as much as possible.

2 Answers 2

2

So first of all, for the class definitions, you can update them to look like so.

export class MyClass {
    // TO-DO
}

As for the require statements, it's normal for the compiler to tell you they are cannot be found.

So given your file structure your imports should look like this:

import helper = require("../helper");
import panel1 = require("./panels/panel1");

or

// remember you can have a file with multiple exported objects
// or and 'index.ts' file inside a folder which exports multiple files
// by using the import syntax you can choose what to import from that module

import { helper } from '../helper';
import { panel1 } from './panels/panel1';  

this should solve your current issues.

Example project I'm working on with TS for help:

https://github.com/vladjerca/imgstry/tree/feature/typescript_port

More on the subject:

https://www.typescriptlang.org/docs/handbook/modules.html

Sign up to request clarification or add additional context in comments.

Comments

-1

Don't use relative paths i.e.

"../../helper".

Always use absolute paths from your project folder i.e. "app/components/Helper"

Also don't put a / in front of the filepath as that can cause issues.

Don't use //references, use

import { myClass } from 'app/components/Helper';

This will also help requirejs find class references easier when bundling the js.

Vlad is also correct, just change your class definition too...

export class Helper {
    [...]
}

you don't need the export = Helper statement at the end of your file.

Comments

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.