如何扩展 globalThis/global 类型?
How to extend globalThis/global type?
我正在使用 Prisma and I saw this code on this guide 开发一个使用打字稿的打字稿项目。但是,我的 linter 给出了以下代码的错误。
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;
第 8、9、11 行(对于 global.prisma
)的错误消息如下
Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature. ts(7017)
如何使用 Prismaclient
扩展 globalThis 或 global 的类型,使其按预期工作?
这是 Prisma 文档 Best practice for instantiating PrismaClient with Next.js 中建议的解决方案。
import { PrismaClient } from '@prisma/client'
declare global {
var prisma: PrismaClient | undefined
}
export const prisma =
global.prisma ||
new PrismaClient()
if (process.env.NODE_ENV !== 'production') global.prisma = prisma
备选方案
您可以直接将 global
显式转换为 any
。滥用转换可能会破坏使用打字稿的价值,但在这个特定的上下文中我没有看到任何伤害或风险。
if (process.env.NODE_ENV === 'production') {
prisma = new PrismaClient();
} else {
if (!(global as any).prisma) {
(global as any).prisma = new PrismaClient();
}
prisma = (global as any).prisma;
}
我正在使用 Prisma and I saw this code on this guide 开发一个使用打字稿的打字稿项目。但是,我的 linter 给出了以下代码的错误。
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;
第 8、9、11 行(对于 global.prisma
)的错误消息如下
Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature. ts(7017)
如何使用 Prismaclient
扩展 globalThis 或 global 的类型,使其按预期工作?
这是 Prisma 文档 Best practice for instantiating PrismaClient with Next.js 中建议的解决方案。
import { PrismaClient } from '@prisma/client'
declare global {
var prisma: PrismaClient | undefined
}
export const prisma =
global.prisma ||
new PrismaClient()
if (process.env.NODE_ENV !== 'production') global.prisma = prisma
备选方案
您可以直接将 global
显式转换为 any
。滥用转换可能会破坏使用打字稿的价值,但在这个特定的上下文中我没有看到任何伤害或风险。
if (process.env.NODE_ENV === 'production') {
prisma = new PrismaClient();
} else {
if (!(global as any).prisma) {
(global as any).prisma = new PrismaClient();
}
prisma = (global as any).prisma;
}