TypeScript:为同一项目中的不同文件声明不同的库/引用

2024-01-08

我有一个用 TypeScript 编写的项目。我同时使用 dom 和 Web Workers,因此我在某些文件中需要 webworker.d.ts 库,在其他文件中需要 dom.d.ts。

我已经尝试将“webworker”添加到 tsconfig.json 中的 lib 选项,但这两者不兼容。

我尝试的另一件事是添加:

/// <reference no-default-lib="true"/>
/// <reference lib="esnext" />
/// <reference lib="webworker" />

在我的 Service Worker 文件的顶部,但“webworker”适用于每个文件,而不仅仅是包含引用的文件。

如何在同一个项目中同时拥有需要引用 dom 的文件和需要引用 webworker 的文件?

这是我的配置:

// tsconfig.json
{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "strict": true,
    "jsx": "preserve",
    "importHelpers": true,
    "noEmitHelpers": false,
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "sourceMap": true,
    "baseUrl": ".",
    "types": ["webpack-env"],
    "paths": {
      "@/*": ["src/*"]
    },
    "lib": ["esnext", "dom", "dom.iterable", "scripthost"]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
    "tests/**/*.ts",
    "tests/**/*.tsx"
  ],
  "exclude": ["node_modules"]
}

用vue看微软/TypeScript/问题/20595 https://github.com/Microsoft/TypeScript/issues/20595其中指出:

We have found that what is meaningful in the global scope of a web worker is significantly more narrow than we find out of the DOM. So we tend to author with "lib": [ "dom" ] and then just declare the handful of APIs we require to make a web worker work, or we obtain a reference to the global object, treat it as any, and pick off certain properties from the global scope and type them at the point where we pick them off.

尝试像:

const ctx: Worker = self as any;
ctx.postMessage();

或:按照已链接 20595 https://github.com/Microsoft/TypeScript/issues/20595配方需要对某些网络工作者部件进行排版或为您需要/使用的组件制作类型文件。

Use:

const globalObject: any = (function (): any {
if (typeof global !== 'undefined') {
    // global spec defines a reference to the global object called 'global'
    // https://github.com/tc39/proposal-global
    // `global` is also defined in NodeJS
    return global;
}
else if (typeof window !== 'undefined') {
    // window is defined in browsers
    return window;
}
else if (typeof self !== 'undefined') {
    // self is defined in WebWorkers
    return self;
}
})();

然后引用,例如:

import globalObject from 'globalObject'
globalObject.postMessage({});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript:为同一项目中的不同文件声明不同的库/引用 的相关文章

随机推荐

  • 在巨大列表中查找/搜索的最有效方法(python)[重复]

    这个问题在这里已经有答案了 我刚刚解析了一个大文件 并创建了一个包含 42 000 个字符串 单词的列表 我想查询 针对此列表 以检查给定的单词 字符串是否属于它 所以我的问题是 这种查找最有效的方法是什么 第一种方法是对列表进行排序 li
  • 为什么gdb会挂起?

    我正在调试一个应用程序 我试图了解 gdb 的工作原理以及为什么我有时无法单步执行该应用程序 我遇到的问题是 当我单步执行程序时 gdb 将挂起 并且它所附加的进程将进入失效状态 gdb 挂起后 我必须杀死它以释放终端 ctrl C 不起作
  • cabal install --- 全局约束需要安装实例

    我的阴谋集团依赖项列出为 base 4 6 containers 0 5 bytestring 0 10 binary 0 5 parsec 3 1 i did cabal sandbox init wget http www stacka
  • 基于视图的 Tableview 中 NSTableview 行的重新排序

    根据苹果文档拖放NSTableView仅针对基于单元格的 TableView 调用委托方法 而不针对基于 View 的委托方法 因此 无法使用基于视图的拖放对行进行重新排序NSTableView 我创建了一个小样本项目 https gith
  • 当测试类没有单独执行时,@SpyBean不会拦截方法调用

    我有多个 WebMvcTest 带注释的测试类 如果单独执行 例如通过mvn Dtest BTest test或通过 IDE 但是 如果它们一起执行 例如通过mvn test or mvn package 一项测试失败 BTest在下面的代
  • AudioKit FFT 转换为 dB?

    第一次发帖 感谢社区的厚爱 我在用AudioKit并尝试向麦克风输入添加频率加权滤波器 因此我尝试了解来自 AudioKit AKFFTTap 的值 目前我正在尝试打印转换为 dB 值的 FFT 缓冲区 for i in 0
  • 如何自动缩放小部件以适应不同的屏幕尺寸?

    我有一个包含 ListTile 的卡片 ListView 在每个列表图块内我都有标题和副标题 我尝试在几部手机 android ios 上调试我的应用程序 对于其中一些手机 字幕文本会溢出卡片小部件 因为它们的屏幕较小 有没有办法根据屏幕尺
  • 点击按钮然后在android中自动发送电子邮件

    我有一个 xml 文件 用户将在其中输入电子邮件 然后当单击提交按钮时 我希望应用程序自动向该电子邮件发送一封包含特定内容的电子邮件 我可以从中获得帮助的任何好的教程或示例 package com example emailtest imp
  • 预加载取决于 Ruby on Rails 中的关联类型

    我有一个多态关联 belongs to resource polymorphic true where resource可以是多种不同的型号 为了简化问题 假设它可以是Order or a Customer 如果它是一个Order我想预加载
  • 安装pbr时出错

    我想在运行 OSX 10 8 5 的计算机上安装 openstack 客户端 作为先决条件 我需要安装 pbr 所以 我做了以下事情 git clone git github com openstack dev pbr git cd pbr
  • 对具有多个条件的元组列表进行排序

    我有一个包含 k 个元素的元组列表 我想先对元素 0 进行排序 然后对元素 1 进行排序 依此类推 我用谷歌搜索 但我仍然不太清楚该怎么做 会是这样的吗 list sort key lambda x x 0 x 1 x k 1 特别是 我想
  • 是否可以在 iPhone 应用程序图标中使用透明度?

    我为我的应用程序创建了一个 57 57 圆形图标 无光泽 其圆外具有透明度 我可以在模拟器和 iPhone 上成功安装该应用程序 它工作得很好 而且看起来很棒 但是 我可以向 Apple 提交透明的图标吗 他们会接受吗 我找不到任何图标具有
  • Cocos2d-x - 如何将CCLayer的一部分设置为透明?

    我是新手cocos2d x我需要你的帮助 我需要使图层的触摸部分透明 如何使图层的一部分透明 我曾想过使用 ClippingNode 但我找不到示例或文档 我使用C 谢谢 在所有cocos2d x版本中添加的TestCpp项目中 您可以找到
  • java 清单类路径与-classpath

    我试图找出可执行 jar 文件的一个奇怪问题 xyz jar 在清单文件 中有一个类路径 并且依赖于 abc jar 库 不幸的是 xyz jar 中的清单类路径不正确 为了避免灾难 我正在更新执行命令以使用 java classpath
  • 为什么 this.evaluate 不能正确返回 DOM 节点?

    我试图通过以下方式从网页获取对象evaluate 方法 这样我就可以在范围之外使用它evaluate 使用名称选择的元素symbol is a
  • “不存在”和“不存在”有什么区别?

    有什么区别not in and not exists在 Oracle 查询中 我什么时候使用not in And not exist 和 之间的不同NOT IN and 不存在变得清楚哪里有NULL结果中包含的值 例如 create tab
  • 使用硬件加速的自定义 Android 视图中的部分失效

    我的应用程序中有一个自定义视图 它填充了整个活动 在大多数情况下 当我想刷新控件时我调用invalidate 没有任何参数 但是 在某些情况下 我只更改控件的一小部分区域 我会调用invalidate Rect 以避免重绘整个屏幕 这很重要
  • 向 JTable 和数据库 (phpMyAdmin) 添加一行?

    initComponents try ResultSet res statement executeQuery SELECT FROM banh ResultSetMetaData RSMD res getMetaData NumberOf
  • 如何在 Xamarin.Forms 中删除(Android)应用程序标题栏?

    我是否可以在 Xamarin Forms 中删除应用程序的标题栏 我正在开发 Xamarin Forms Portable 项目 我尝试了很多解决方案 但都不起作用 我什至无法启动应用程序 第一次尝试我尝试将其添加到我的 AndroidMa
  • TypeScript:为同一项目中的不同文件声明不同的库/引用

    我有一个用 TypeScript 编写的项目 我同时使用 dom 和 Web Workers 因此我在某些文件中需要 webworker d ts 库 在其他文件中需要 dom d ts 我已经尝试将 webworker 添加到 tscon