在本地引用 TypeScript dom lib 类型

Posted

技术标签:

【中文标题】在本地引用 TypeScript dom lib 类型【英文标题】:Reference TypeScript dom lib types locally 【发布时间】:2020-10-12 20:32:12 【问题描述】:

TypeScript 内置 DOM 库中的几种类型需要在本地模块中用于跨平台代码片段,例如:

// foo.ts
export let foo: EventListener = (e) => ...;

这可以通过添加:

/// <reference lib="dom" />

问题是该项目中的其他模块被 DOM 相关类型污染,而它们并非特定于浏览器或 DOM。

// bar.ts
class Animation 
    ...

这会导致任何可能与浏览器全局变量同名的变量出现名称冲突错误,例如:

重复标识符'...'.ts(2300)

lib.dom.d.ts: '...' 也在这里声明。

以下标识符的定义与另一个文件中的标识符冲突:... ts(6200)

lib.dom.d.ts:此文件中存在冲突。

无法重新声明块范围的变量 '...'.ts(2451)

lib.dom.d.ts: '...' 也在这里声明。

如果可能的话,我宁愿避免从 lib.dom.d.ts 粘贴像 EventListener 这样的类型层次结构。

如何在一个本地模块中使用内置库中的类型而不影响其他模块?

【问题讨论】:

我也有同样的问题。真的想有一种方法来导入具有正常模块语义的运行时类型,例如。 import * as dom from "dom". 【参考方案1】:

正如 here on stack overflow 和 TypeScript's GitHub 的回答,这在单个 TypeScript 项目中是不可能的,这是设计使然。

但作为一种解决方法,您可以为应该有权访问 dom 类型的模块和不能访问的模块创建单独的 TypeScript 项目。

【讨论】:

以上是关于在本地引用 TypeScript dom lib 类型的主要内容,如果未能解决你的问题,请参考以下文章

java引用第三方库

Typescript零碎总结

idea引用本地lib包(gradle)

在 Typescript 上使用带有本地参数的 toLocaleLowerCase 方法

maven如何在web工程中将本地lib文件打包到war中

如何在Android Studio添加本地aar包引用