Fix typing issues locally with `paths`
The Definitely Typed community does an awesome job typing packages that ship without types, but as most community maintained efforts it is a work in progress.
If you find an error in a @types declaration you can expand it by including a declaration in the paths entry of the compilerOptions in your tsconfig file. If you use paths you must also specify a baseUrl.
For example, in @types/mongoose the SchemeOptions interface is incomplete: the optimisticConcurrency flag is missing and typescript throws an error. Let’s fix it.
We’ll a declaration file index.d.ts with the addition that we wish to do. We’ll do it in the following path: <project-root>/typings/mongoose/index.d.ts.
declare module "mongoose" {
export interface SchemaOptions {
optimisticConcurrency?: boolean;
}
}
Then we’ll update the tsconfig, to include the new path.
// tsconfig.json
"compilerOptions: {
//...
"baseUrl": ".",
"paths": {
"*": [
"typings/*"
]
}
}
The baseUrl is relative to the tsconig.
With the wildcard * you are telling the compiler that for every module it should check the specified paths (independently of weder they are type declarations or executable code).
We could have used a different path, but with this structure we can add typings for any library.
Of course, this is only a short term fix and we should open a pull request to DefinitelyTyped.