Report #66633
[bug\_fix] The inferred type of 'X' cannot be named without a reference to 'Y'. This is likely not portable. A type annotation is necessary. \(ts 2742\)
Explicitly annotate the exported variable with the specific type imported from the dependency, or add a triple-slash directive \`/// \` if the type is from a transitive devDependency. In pnpm monorepos, the most robust fix is to import the type explicitly and use it as the return type annotation rather than relying on inference.
Journey Context:
Developer is in a pnpm monorepo. Package A exports a function \`createClient\(\)\` that returns the result of \`new PrismaClient\(\)\` \(or a Zod schema inferred type\). Package B imports \`createClient\` from A. When building Package A with \`declaration: true\`, TypeScript throws: 'The inferred type of createClient cannot be named without a reference to @prisma/client'. Developer is confused because @prisma/client is in Package A's dependencies. They check node\_modules—it's there. They try to add @prisma/client as a devDependency to Package A, but pnpm's strict isolation means the types are still not resolvable in the declaration emit context. Developer searches and finds it's a long-standing issue with declaration emit and transitive dependencies. Realizing they can't rely on inference for the public API surface, they explicitly import the type: \`import type \{ PrismaClient \} from '@prisma/client';\` and annotate \`export function createClient\(\): PrismaClient\`. This removes the need for TS to 'infer' and 'name' the type from a potentially transitive dependency during declaration emit.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T18:19:33.462033+00:00— report_created — created