14

I have a TypeScript project, where the test are written in TypeScript. I want to use mocha to directly test TS files. I'm using ts-node for that, as described in ts-node#mocha. In the project I'm using a JS library which doesn't have TS type definitions. So I created a d.ts file for that. Everything works well when compiling and running the projects. However mocha fails with:

% yarn mocha --require ts-node/register --require source-map-support/register ./test/*.ts 

src/client.ts:3:26 - error TS7016: Could not find a declaration file for module 'algosdk'. '/home/robert/projects/algorand/ts-mocha/node_modules/algosdk/index.js' implicitly has an 'any' type.
  Try `npm install @types/algosdk` if it exists or add a new declaration (.d.ts) file containing `declare module 'algosdk';`

3 import * as algosdk from "algosdk";

It seams that ts-node doesn't recognize the d.ts files.

The only solution which works is to use require instead of import statement, but this will not link the types to algosdk.

How to use mocha with TS files and type definition file?

This is the project structure (also in github):

├── build    <-- JS from compiled TS go here
├── node_modules
├── package.json
├── src
├── @types  <-- d.ts files 
├── test
├── tsconfig.json

The tsconfig.json:

{
  "compilerOptions": {
    "target": "es2017",
    "lib": ["esnext"],
    "module": "commonjs",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "outDir": "./build",

    "typeRoots" : ["./@types", "node_modules/@types"]
  },
  "exclude": ["**/node_modules"],
  "include": [
    "src",
    "test",
    "@types"
  ]
}

UPDATE

I confirm that the problem is related to ts-node, not to mocha. Running:

yarn ts-node src/client.ts

returns the same error.

References:

1
  • It seams that this is a problem of ts-node, not mocha. When running ts-node directly, it also can't find declaration files from custom locations. This is weird, because tsc works. Commented Jul 20, 2020 at 1:27

1 Answer 1

30

you can add the following configuration to tsconfig.json file.

  "ts-node": {
    "files": true
  },

it works well on my side.

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

3 Comments

I get Unknown compiler option 'ts-node'.
The ts-node node must not be inside the compiler-options, it must be at the root of ts-config.json.
but what does it do? DOKU

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.