TypeScript use noImplicitAny with Javascript sources

I want to enable the noImplicitAny flag in my compiler. My problem is that I use lodash/fp and there is no typings so far.

So the compiler complains about the lack of definition file for lodash/fp.

Is there a way to allow implicit any only for external js files ? Or to whitelist a subdirectory like node_modules ?

1

3 Answers

The way I get around this is by creating a file where I declare the modules I want to use that have no typings. For example I would create a file called modules.ts, and there simple decalre the module I want to use like so: declare module 'name-of-module'. Now on any file I want to use my non typed module I can simply import my modules.ts and then the module I want to use using the import * as syntax. What this does is change it from implicit any to explicit any, but this of course will not give you typings for these modules, it simply allows to you to use them.

In your tsconfig.json you should have the following:

{ "compilerOptions": { "target": "es5", "module": "commonjs", "noResolve": true, "sourceMap": true, "noImplicitAny": true, "removeComments": true, "experimentalDecorators": true }, "exclude": [ "node_modules" ]
}

This should prevent the node_modules folder from being compiled to JavaScript as they're most likely already JavaScript.

If the "files" and "include" are both left unspecified, the compiler defaults to including all TypeScript (.ts, .d.ts and .tsx) files in the containing directory and subdirectories except those excluded using the "exclude" property.

See the main TypeScript site here

2

You can create a declaration file with ".d.ts" extension like ambient-modules.d.ts

Add the following line in this file

declare module '*';

And you're done!

Now, you still get the benefits of noImplicitAny flag without worrying about the other js files which don't have any types available.

For more info, you can refer here

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like