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.
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.