How to allow modules that have missing .d.ts type

2019-08-20 12:26发布

问题:

I'm using some unpopular modules such as Dyo and js-sha3 which doesn't have any types, it seems.

I don't really care right now about types in third-party libraries, I don't want to spend hours typing those. I mainly use it for the server to limit my mistakes and make troubleshooting easier while in development.

I had a Cannot find module X error before so I've added: "moduleResolution": "node" in my tsconfig.json file.

How can I make typescript not complaining about node modules missing types?

The whole error:

Could not find a declaration file for module 'dyo'. '/node_modules/dyo/dist/dyo.umd.js' implicitly has an 'any' type.
  Try `npm install @types/dyo` if it exists or add a new declaration (.d.ts) file containing `declare module 'dyo';` [7016]

I found // @ts-nocheck in a comment in some dark place of the web but it doesn't seem to work.

Can I turn this off by modules?

回答1:

You can create dummy .d.ts definition which will allow to import anything from the module - importing it will result in dyo having any type (the exact way to import it depends on the esModuleInterop compiler setting, and on how the things are exported from dyo.umd.js).

  1. create a file dyo.d.ts somewhere within your project with one line in it

    declare module 'dyo';
    
  2. in a file that references that module, add this line at the top, with appropriate path to dyo.d.ts file:

    /// <reference path='./dyo.d.ts' />
    

An alternative to 2. is to add dyo.d.ts to the list of the files included in the compilation in tsconfig.json file:

"files": [
    ... other files as necessary ...

    "./path/to/dyo.d.ts"
]