得到错误
错误TS2304:找不到名称“ClipboardItem”
当尝试为ClipboardItem
创建navigator.clipboard.write()
时。
const clipboardItemInput = new ClipboardItem({'image/png' : blobInput});
await navigator.clipboard.write([clipboardItemInput]);
我使用的是角6。我需要添加任何依赖项,还是有其他方法?
发布于 2021-05-23 16:02:27
For TypeScript 4.4及更高版本
TypeScript 4.4用缺少的接口和方法(更改的完整列表)更新了标准定义库,所以一切都应该开箱即用。下面的示例代码现在在没有附加接口/声明合并的情况下编译:
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" />
):
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
被定义为接受Blob
、string
或返回前者之一而不仅仅是Blob
的承诺(例如,请参见MDN参考 )。用缺少的Clipboard
和write
方法扩展read
接口也没有什么害处:
interface Clipboard {
read(): Promise<DataTransfer>;
write(data: ClipboardItem[]): Promise<void>;
}
最后,让我们测试定义是否如预期的那样工作:
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]);
})();
发布于 2020-04-29 15:23:25
打字本版本可能没有包含所有的功能。这就是我们需要通过创建类型或扩展现有类型来扩展它的地方。要解决这个问题,请尝试创建一个types.d.ts文件(reference1),并将以下内容放入其中:
declare class ClipboardItem {
constructor(data: { [mimeType: string]: Blob });
}
然后用以下方式引用组件代码中的文件:
/// <reference path="types.d.ts" />
那就随便用这门课吧。
const item = new ClipboardItem({ "image/png": blob });
window.navigator['clipboard'].write([item]);
灵感:reference2
发布于 2021-08-03 19:32:17
简单但不伟大
let anyNavigator: any;
anyNavigator = window.navigator;
const clipboardItemInput = new ClipboardItem({'image/png' : blobInput});
await anyNavigator.clipboard.write([clipboardItemInput]);
如果您想要read clipboard
或调用任何具有返回值的函数:
let anyNavigator: any;
anyNavigator = window.navigator;
(anyNavigator.clipboard.readText() as Promise<string>).then(data => {
// ...
});
https://stackoverflow.com/questions/61187374
复制相似问题