vegemite4me
vegemite4me

Reputation: 6856

How to 'import' a third party Javascript file into IntelliJ so that I can refer to it in a Typescript file

I am trying to write Typescript in IntelliJ and do not know how to tell IntelliJ to 'import' some third party Javascript files. IntelliJ (or is it Node.JS?) gives the following complaint:

C:/Temp/Typescript Example Project/ts/FinancialService.ts(2,17): error TS2095: Could not find symbol 'com'.
C:/Temp/Typescript Example Project/ts/FinancialService.ts(4,31): error TS2095: Could not find symbol 'com'.

I would like to 'import' Thirdparty.Calculator.js:

var com = com || {};
com.thirdparty = com.thirdparty || {};
com.thirdparty.Calculator = function() {
    this.add = function(a, b) {
        return a + b;
    };
    this.square = function(n) {
        return n*n;
    };
};

This is what FinancialService.ts looks like:

class FinancialService {
    calculator: com.thirdparty.Calculator;
    constructor() {
        this.calculator = new com.thirdparty.Calculator();
    }
    calculateStuff(a: number) {
            return this.calculator.square(a);
    }
}

IntelliJ appears to transpile the Typescript as the following works and the correct values are logged to the console:

<html>
    <head>
        <script src="js/Thirdparty.Calculator.js"></script>
        <script src="ts/FinancialService.js"></script>

        <script>
            var cal = new com.thirdparty.Calculator();
            console.log("Calculator.square() is " + cal.square(9));

            var fs = new FinancialService();
            console.log("FinancialService.calculateStuff() is " + fs.calculateStuff(4));
        </script>
    </head>
    <body>
    </body>
</html>

How can I configure my project so that IntelliJ knows about Thirdparty.Calculator.js?

Upvotes: 1

Views: 616

Answers (1)

Fenton
Fenton

Reputation: 250932

You could add Thirdparty.Calculator.d.ts to your project for TypeScript compilation purposes:

declare module com.thirdparty {
    export class Calculator {
        add(a: number, b: number) : number;
        square(n: number) : number;
    }
}

This would obviously need to grow with the third party library.

For very little extra effort, you could just convert it to TypeScript...

module com.thirdparty {
    export class Calculator {
        add = function(a: number, b: number) {
            return a + b;
        };
        square(n: number) : number {
            return n*n;
        }
    }
}

Upvotes: 2

Related Questions