Using javascript neo4j-driver with Typescript

I have used the neo4j-driver in the past but now want to use it in a project written in Typescript. I had expected that I could just get the type definityions by using @types/neo4j-driver like with so many other libraries. Searching the web I have not found anything helpful or even current, this also does not seem to be documented in the official driver docs ( or at least I can't find it). I am surprised it doesn't seem to have come up as a topic here (apologies if it has and I just can't find it - I have looked).

How/where do I get the types for the javascript neo4j-driver to use in a Typescript project?

The type definitions are distributed with the neo4j-driver package and are not in the DefinitelyTyped repo. You can find the type definitions here and can use them like this:

 import neo4j from "neo4j-driver";
 const driver: neo4j.Driver = neo4j.driver("bolt://localhost");
 const session: neo4j.Session = driver.session();
2 Likes

To reopen this topic:

If you wish you can also check out Drivine - a community TypeScript driver with a sweet-spot level of abstraction.

It is designed to scale to hundreds/thousands of txns per second and:

  • Manages infrastructure concerns, such as obtaining and releasing connections and sessions.
  • Facilitates implementation of repositories, which can be injected into services. Your code adheres to single responsibility principle (SRP).
  • Supports declarative, decorator-driven transactions.
  • Supports streaming.
  • Maps and transforms query results onto typed entities or models. Drivine makes an important distinction with regards to its mapping approach. This will be detailed below.
1 Like

While developing some neo4j stuff in a typescript project i run into a related problem. I don't use DefinitelyTyped repo. I found a quick fix, but I thought it may helps some others, and maybe could fix it or explains me why it happened.

import neo4j from 'neo4j-driver';
const driver: neo4j.Driver = neo4j.driver("bolt://localhost");
const session: neo4j.Session = driver.session();

would serve me (in visual code) a "Cannot find namespace neo4j"
neo_driver_issue_1

However the following works

import neo4j from 'neo4j-driver';
const driver: typeof neo4j.Driver = neo4j.driver("bolt://localhost");
const session: typeof  neo4j.Session = driver.session();

works just fine.

I am using typescript "^3.2" and neo4j-driver "^4.1.2"

as per your suggestion, there are no errors if I use const session: typeof neo4j.Session = driver.session();. But session object does not have a close method. it has only two properties read and write. How to fix this issue?

Alternatively, you can also import those specific types using an import type statement. There's more information here in the Typescript's 3.8 documentation.

import neo4j from 'neo4j-driver';
import type { Driver, Session } from 'neo4j-driver';
const driver: Driver = neo4j.driver("bolt://localhost");
const session: Session = driver.session();

For anyone coming late to this topic, there is now a Building Neo4j Applications with TypeScript course on GraphAcademy.