如何避免 dom / Deno 类型与 Typescript SSR 冲突

How to avoid dom / Deno type conflicts with Typescript SSR

我正在尝试使用基于 this guide 的 Typescript 和 Deno 设置 React SSR。基本设置有效,但是当我尝试添加 BlueprintJS 组件库时,我 运行 遇到了问题。

蓝图依赖于 Popper,它使用一些 DOM 类型,例如CSSStyleDeclaration。我的 server.tsx 需要使用 Deno 对象 Popper(因为它需要 import { App } from "components/app.tsx";)所以理论上我需要我的 tsconfig.json同时包含 Deno 和 DOM 类型,如下所示:

"lib": ["dom", "dom.iterable", "esnext", "deno.ns", "deno.unstable"],

但是这不起作用,因为它们相互冲突。但我需要它们 - 如果我删除其中任何一个,那么我会丢失类型错误 - DenoCSSStyleDeclaration.

如何在不牺牲类型检查的情况下解决这个问题?

You can't,并且您需要单独 type-check 所有使用不兼容环境类型的模块,然后 运行 您的程序禁用 type-checking。

TypeScript 编译器(Deno 当前用于编译 TS 源文件的编译器)尚无法处理依赖于冲突环境类型的单个图中的模块。