首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在全局node.js对象上解决此typescript错误

如何在全局node.js对象上解决此typescript错误
EN

Stack Overflow用户
提问于 2021-11-05 08:49:42
回答 2查看 414关注 0票数 1

我正在按照这个指南https://vercel.com/guides/nextjs-prisma-postgres创建一个完整的堆栈应用程序。Typescript在以下代码片段中抛出错误:

代码语言:javascript
复制
import { PrismaClient } from '@prisma/client';
let prisma: PrismaClient;

if (process.env.NODE_ENV === 'production') {
  prisma = new PrismaClient();
} else {
  if (!global.prisma) {
    global.prisma = new PrismaClient();
  }
  prisma = global.prisma;
}

export default prisma;

TypeScript在global.prisma上抛出一个ts7017

代码语言:javascript
复制
Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature.

有没有人能帮我理解这个问题,以及如何修复?我暂时在tsconfig中将'strict‘设置为false,这暂时抑制了这个问题,尽管我确信关闭它会违背TS的目的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-05 09:54:52

我可以用严格模式将相同的错误重现为true和@types/node package version 16

这应该是可行的:

代码语言:javascript
复制
declare global {
  var prisma: PrismaClient; // This must be a `var` and not a `let / const`
}

import { PrismaClient } from "@prisma/client";
let prisma: PrismaClient;

if (process.env.NODE_ENV === "production") {
  prisma = new PrismaClient();
} else {
  if (!global.prisma) {
    global.prisma = new PrismaClient();
  }
  prisma = global.prisma;
}

export default prisma;
票数 2
EN

Stack Overflow用户

发布于 2021-11-05 09:52:22

根据docs,您需要先声明变量global

代码语言:javascript
复制
import { PrismaClient } from '@prisma/client'

declare global {
  var prisma: PrismaClient | undefined
}

export const prisma =
  global.prisma ||
  new PrismaClient({
    log: ['query'],
  });

if (process.env.NODE_ENV !== 'production') global.prisma = prisma;

您还可以有一个包含声明的单独文件globals.d.ts

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69850598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档