首页 > 解决方案 > JSZip 使用打字稿在 node.js 中产生 TS2322 错误

问题描述

添加导入语句后:

import JSZip from 'jszip';

构建会产生错误:

TS2322: Type 'string | undefined' is not assignable to type 'string'.
  Type 'undefined' is not assignable to type 'string'.

对于这些代码行:

const env: string = process.env.NODE_ENV;
...
private timeoutTime: number = process.env.VUE_APP_TIME_OUT; 
...

node.js 版本:14.16.1

jszip版本:3.7.1

打字稿:3.9.4

删除 JSZip 的导入,错误就消失了。有多个相同错误的实例 - 但并非在使用 process.env 的所有情况下。不知道如何解决这个问题。

标签: node.jstypescriptjszip

解决方案


中的属性process.env有一个类型string | undefined,您有两个选择

第一的

将他们的道具投射到你想要的类型

const env = process.env.NODE_ENV as string;

第二

types.d.ts在 yow package.json创建一个文件调用添加一个 prop 调用types并将路径设置为 yow 新文件types.d.ts

{
....
"types":"./types.d.ts",
....
}

在 yow tsconfig.json 中有一个 prop calltypeRoots假设 yow"baseUrl": "./node_modules"

你看起来typesRoots像:

//tsconfig.json

{
  "baseUrl": "./node_modules",
  "typeRoots": [
    "../types.d.ts",
  ]
}

将此添加到新文件中

/// <reference types="node" />

declare namespace NodeJS {
    interface ProcessEnv {
        readonly NODE_ENV: "development" | "production" | "test";
        readonly PUBLIC_URL: string;
        readonly PORT: string;
    }
}

现在添加所有 yow vars 所有你在那里设置的 vars 将有一个类型字符串


推荐阅读