简体   繁体   中英

How to use TypeScript Declaration File with mocha tests?

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:

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

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

it works well on my side.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM