next.js 类型'字符串|当使用.env值时,“undefined”不能分配给类型“string”[重复]

8aqjt8rx  于 2023-06-22  发布在  其他
关注(0)|答案(1)|浏览(185)

此问题已在此处有答案

using process.env in TypeScript(20个回答)
12天前关闭
我在我的nextjs-13应用中实现了next-auth,但是当我试图在[...nextauth]/route.ts中使用.env变量时,它显示错误:
类型'字符串|undefined'不能赋值给类型' string '。

项目详情

| Package 名称|软件包版本|
| - -----|- -----|
| Next.js(带有app route和src/ directory)|13.4.4|
| 类型脚本|5.1.3|
| 下一认证|4.22.1|

.env文件

GOOGLE_CLIENT_ID=my-Client-Id
GOOGLE_CLIENT_SECRET=my-Client-Secret
kzmpq1sx

kzmpq1sx1#

选项一:铸件

简单的解决方案是将环境变量转换为如下所示的字符串。如果你知道你的环境变量已经定义好了,这将很好地工作。但是,如果您在未来忘记设置它们,您将得到错误。

GoogleProvider({
  clientId: process.env.GOOGLE_CLIENT_ID as string,
  clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
})

选项二:类型缩小

您可以确保在访问env变量之前定义它们。但这可能会变得非常重复。Typescript现在知道这个代码块没有未定义。你有同样的问题,在选项1虽然差不多。

if (
  process.env.GOOGLE_CLIENT_ID === undefined ||
  process.env.GOOGLE_CLIENT_SECRET == undefined
) {
  throw new Error('Invalid env vars');
}

选项三:类型化的env变量

我认为这是最好的选择。我强烈推荐t3-env软件包。然后你就可以访问类型安全的环境变量。

相关问题