首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何修复“无法找到名称'ClipboardItem'”错误?

如何修复“无法找到名称'ClipboardItem'”错误?
EN

Stack Overflow用户
提问于 2020-04-13 11:57:09
回答 3查看 4.3K关注 0票数 4

得到错误

错误TS2304:找不到名称“ClipboardItem”

当尝试为ClipboardItem创建navigator.clipboard.write()时。

代码语言:javascript
运行
复制
const clipboardItemInput = new ClipboardItem({'image/png' : blobInput});
 await navigator.clipboard.write([clipboardItemInput]);

我使用的是角6。我需要添加任何依赖项,还是有其他方法?

EN

回答 3

Stack Overflow用户

发布于 2021-05-23 16:02:27

For TypeScript 4.4及更高版本

TypeScript 4.4用缺少的接口和方法(更改的完整列表)更新了标准定义库,所以一切都应该开箱即用。下面的示例代码现在在没有附加接口/声明合并的情况下编译:

代码语言:javascript
运行
复制
declare const image: ClipboardItemData;
(async () => {
  const item = new ClipboardItem({ "image/png": image });

  const files = await navigator.clipboard.read();
  if( files.length ) return;

  await navigator.clipboard.write([item]);
})();

游乐场

For TypeScript 4.3和更低的

到2021年,TypeScript标准库仍然缺少剪贴板API的定义(这就是“无法找到名称'ClipboardItem'”错误的原因)。源存储库上有一个公开发行,而DOM生成器存储库上有一个拉请求 (因为标准库是自动生成的),它们应该解决这个问题。

同时,您可以添加与标准库如何定义其他全局接口相匹配的定义(不要忘记在导入文件的顶部添加一个三元斜杠指令/// <reference types="../../index" /> ):

代码语言:javascript
运行
复制
interface ClipboardItem {
  readonly types: string[];
  readonly presentationStyle: "unspecified" | "inline" | "attachment";
  getType(): Promise<Blob>;
}

interface ClipboardItemData {
  [mimeType: string]: Blob | string | Promise<Blob | string>;
}

declare var ClipboardItem: {
  prototype: ClipboardItem;
  new (itemData: ClipboardItemData): ClipboardItem;
};

请注意,ClipboardItemData被定义为接受Blobstring或返回前者之一而不仅仅是Blob的承诺(例如,请参见MDN参考 )。用缺少的Clipboardwrite方法扩展read接口也没有什么害处:

代码语言:javascript
运行
复制
interface Clipboard {
  read(): Promise<DataTransfer>;
  write(data: ClipboardItem[]): Promise<void>;
}

最后,让我们测试定义是否如预期的那样工作:

代码语言:javascript
运行
复制
declare const image: Blob;
(async () => {
  const item = new ClipboardItem({ ["image/png"]: image });

  const { files } = await navigator.clipboard.read();
  if( files.length ) return;

  await navigator.clipboard.write([item]);
})();

游乐场

票数 6
EN

Stack Overflow用户

发布于 2020-04-29 15:23:25

打字本版本可能没有包含所有的功能。这就是我们需要通过创建类型或扩展现有类型来扩展它的地方。要解决这个问题,请尝试创建一个types.d.ts文件(reference1),并将以下内容放入其中:

代码语言:javascript
运行
复制
declare class ClipboardItem {
  constructor(data: { [mimeType: string]: Blob });
}

然后用以下方式引用组件代码中的文件:

代码语言:javascript
运行
复制
/// <reference path="types.d.ts" />

那就随便用这门课吧。

代码语言:javascript
运行
复制
const item = new ClipboardItem({ "image/png": blob });
window.navigator['clipboard'].write([item]);

灵感:reference2

票数 3
EN

Stack Overflow用户

发布于 2021-08-03 19:32:17

简单但不伟大

代码语言:javascript
运行
复制
let anyNavigator: any;
anyNavigator = window.navigator;
const clipboardItemInput = new ClipboardItem({'image/png' : blobInput});
await anyNavigator.clipboard.write([clipboardItemInput]);

如果您想要read clipboard或调用任何具有返回值的函数:

代码语言:javascript
运行
复制
let anyNavigator: any;
anyNavigator = window.navigator;
(anyNavigator.clipboard.readText() as Promise<string>).then(data => {
// ...
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61187374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档