Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeScript require with type checking

I am using TypeScript v1.4.1 and would like to require an external module (in this case "chai") and have it be type checked.

However, I am running into some sort of naming conflict with this code:

/// <reference path="../typings/node/node.d.ts" />
/// <reference path="../typings/chai/chai.d.ts" />
/// <reference path="../typings/mocha/mocha.d.ts" />

var chai = require("chai");

var expect = chai.expect;
var assert = chai.assert;

describe("TEST", () =>
{
   it("true should be true", (done)=>
   {
      expect(true).to.be.true;
      done();
   });
});

With this definition file:

declare module chai {
   ...
}
declare module "chai" {
   export = chai;
}

Compiling gives these errors:

test/test.ts(5,5): error TS2300: Duplicate identifier 'chai'.
typings/chai/chai.d.ts(6,16): error TS2300: Duplicate identifier 'chai'.

It seems my only option is rename my chai variable name in test.ts. That seems clunky AND won't type check the use of the renamed chai variable.

Any advice?

like image 843
EToreo Avatar asked Feb 16 '15 18:02

EToreo


People also ask

Does TypeScript offer type checking?

Code written in TypeScript is checked for errors before it is executed, during compile time.

Does JavaScript have type checking?

JavaScript type checking is not as strict as other programming languages. Use the typeof operator for detecting types. There are two variants of the typeof operator syntax: typeof and typeof(expression) . The result of a typeof operator may be misleading at times.

What is static type checking in TypeScript?

Static type checkers like Flow and TypeScript identify certain types of problems before you even run your code. They can also improve developer workflow by adding features like auto-completion. For this reason, we recommend using Flow or TypeScript instead of PropTypes for larger code bases.

What is TSC TypeScript?

Tsc stands for `TypeScript compiler` and is a simple tool included in Typescript itself, allowing you to compile any ts files into js.


1 Answers

Use the import keyword with require instead of var

import chai = require('chai');

And compile with --module commonjs if you're not already

Or, if for some reason you don't want the test code to be an external module, adding a type annotation will preserve type checking.

var c: typeof chai = require("chai");
like image 139
curpa Avatar answered Oct 05 '22 04:10

curpa