Description
TypeScript Version:
Version 2.6.2
Search Terms:
declaration file for module exporting function, external module, npm package, third-party module
Code
src/testFile.ts
:
import getFieldList = require('graphql-list-fields');
src/@types/graphql-list-fields/index.d.ts
:
// Doing just this below (as suggested by the Typescript Handbook does not work
// and results in the tsc error under **Actual behavior** below
import { GraphQLResolveInfo } from 'graphql';
declare function getFieldList(info: GraphQLResolveInfo): string[];
export = getFieldList;
// The code below is what actually works instead of the above
/*
declare module 'graphql-list-fields' {
import { GraphQLResolveInfo } from 'graphql';
function getFieldList(info: GraphQLResolveInfo): string[];
export = getFieldList;
}
*/
Expected behavior:
Compiling without errors.
Actual behavior:
Error when running tsc
:
src/testFile.ts(1,31): error TS7016: Could not find a declaration file for module 'graphql-list-fields'. '/node_modules/graphql-list-fields/index.js' implicitly has an 'any' type.
Try `npm install @types/graphql-list-fields` if it exists or add a new declaration (.d.ts) file containing `declare module 'graphql-list-fields';`
graphql-list-fields
is an NPM package that I'm trying to use, which currently has no published type declarations.
After reading through the Typescript Handbook's section on declaration files, I found that I am trying to write a declaration file for a modular library and should use the module-function.d.ts declaration file template. This is how I came up with the code in index.d.ts
above, but the compiler still complains about not having the declaration file for the module 'graphql-list-fields'. After trial and error, we found that adding declare module 'graphql-list-fields'
around everything worked without compiler errors.
We tried setting "typeRoots": ["./node_modules/@types", "./src/@types"]
in tsconfig.json
, as mentioned in the tsconfig docs but that still did not work without declare module 'graphql-list-fields'
. This seems to be an issue because tsc is not finding the type declaration in the directories specified in typeRoots.